fief-dev / fief

Users and authentication management SaaS
https://www.fief.dev
Other
538 stars 45 forks source link

User verification email failing #253

Closed tito closed 1 year ago

tito commented 1 year ago

Describe the bug

Fief got auto updated in docker this morning. All of the sudden, current user must verify their email, and we didn't have any email provider setup as it was not necessary.

Then, after setting an smtp we got:

stacks-fief-1  | 2023-08-18 14:54:19.716 | ERROR    | dramatiq.worker:process_message:513 - Failed to process message on_email_verification_requested('0d4e8575-eb5b-48f4-95c1-2a50e9dcf08e', '74272c99-3631-4cba-a61f-f11ba3c88275', '9V5SB4') with unhandled exception. - {}
stacks-fief-1  | Traceback (most recent call last):
stacks-fief-1  | 
stacks-fief-1  |   File "/usr/local/lib/python3.11/threading.py", line 995, in _bootstrap
stacks-fief-1  |     self._bootstrap_inner()
stacks-fief-1  |     │    └ <function Thread._bootstrap_inner at 0x7fa9f101a8e0>
stacks-fief-1  |     └ <_WorkerThread(Thread-5, started daemon 140367517185728)>
stacks-fief-1  |   File "/usr/local/lib/python3.11/threading.py", line 1038, in _bootstrap_inner
stacks-fief-1  |     self.run()
stacks-fief-1  |     │    └ <function _WorkerThread.run at 0x7fa9e9864040>
stacks-fief-1  |     └ <_WorkerThread(Thread-5, started daemon 140367517185728)>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/threading.py", line 70, in run
stacks-fief-1  |     return old_run_func(self, *a, **kw)
stacks-fief-1  |            │            │      │    └ {}
stacks-fief-1  |            │            │      └ ()
stacks-fief-1  |            │            └ <_WorkerThread(Thread-5, started daemon 140367517185728)>
stacks-fief-1  |            └ <function _WorkerThread.run at 0x7fa9eec94040>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/dramatiq/worker.py", line 460, in run
stacks-fief-1  |     self.process_message(message)
stacks-fief-1  |     │    │               └ <dramatiq.broker.MessageProxy object at 0x7fa9da001bd0>
stacks-fief-1  |     │    └ <function _WorkerThread.process_message at 0x7fa9eec940e0>
stacks-fief-1  |     └ <_WorkerThread(Thread-5, started daemon 140367517185728)>
stacks-fief-1  | > File "/usr/local/lib/python3.11/site-packages/dramatiq/worker.py", line 485, in process_message
stacks-fief-1  |     res = actor(*message.args, **message.kwargs)
stacks-fief-1  |           │      │               └ <dramatiq.broker.MessageProxy object at 0x7fa9da001bd0>
stacks-fief-1  |           │      └ <dramatiq.broker.MessageProxy object at 0x7fa9da001bd0>
stacks-fief-1  |           └ Actor(<fief.tasks.email_verification.OnEmailVerificationRequestedTask object at 0x7fa9ea11d7d0>, queue_name='default', actor_...
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/dramatiq/actor.py", line 177, in __call__
stacks-fief-1  |     return self.fn(*args, **kwargs)
stacks-fief-1  |            │    │   │       └ {}
stacks-fief-1  |            │    │   └ ('0d4e8575-eb5b-48f4-95c1-2a50e9dcf08e', '74272c99-3631-4cba-a61f-f11ba3c88275', '9V5SB4')
stacks-fief-1  |            │    └ <fief.tasks.email_verification.OnEmailVerificationRequestedTask object at 0x7fa9ea11d7d0>
stacks-fief-1  |            └ Actor(<fief.tasks.email_verification.OnEmailVerificationRequestedTask object at 0x7fa9ea11d7d0>, queue_name='default', actor_...
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/fief/tasks/base.py", line 108, in __call__
stacks-fief-1  |     result = runner.run(self.run(*args, **kwargs))
stacks-fief-1  |              │      │   │    │    │       └ {}
stacks-fief-1  |              │      │   │    │    └ ('0d4e8575-eb5b-48f4-95c1-2a50e9dcf08e', '74272c99-3631-4cba-a61f-f11ba3c88275', '9V5SB4')
stacks-fief-1  |              │      │   │    └ <function OnEmailVerificationRequestedTask.run at 0x7fa9e9fc2e80>
stacks-fief-1  |              │      │   └ <fief.tasks.email_verification.OnEmailVerificationRequestedTask object at 0x7fa9ea11d7d0>
stacks-fief-1  |              │      └ <function Runner.run at 0x7fa9f0652fc0>
stacks-fief-1  |              └ <asyncio.runners.Runner object at 0x7fa9da1c5d10>
stacks-fief-1  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
stacks-fief-1  |     return self._loop.run_until_complete(task)
stacks-fief-1  |            │    │                        └ <Task finished name='Task-107' coro=<OnEmailVerificationRequestedTask.run() done, defined at /usr/local/lib/python3.11/site-p...
stacks-fief-1  |            │    └ None
stacks-fief-1  |            └ <asyncio.runners.Runner object at 0x7fa9da1c5d10>
stacks-fief-1  |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
stacks-fief-1  |     return future.result()
stacks-fief-1  |            │      └ <method 'result' of '_asyncio.Task' objects>
stacks-fief-1  |            └ <Task finished name='Task-107' coro=<OnEmailVerificationRequestedTask.run() done, defined at /usr/local/lib/python3.11/site-p...
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/fief/tasks/email_verification.py", line 41, in run
stacks-fief-1  |     subject = await email_subject_renderer.render(
stacks-fief-1  |                     │                      └ <function EmailSubjectRenderer.render at 0x7fa9e9fc0540>
stacks-fief-1  |                     └ <fief.services.email_template.renderers.EmailSubjectRenderer object at 0x7fa9da057b90>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/fief/services/email_template/renderers.py", line 144, in render
stacks-fief-1  |     subject_template_object = jinja_environment.get_template(type.value)
stacks-fief-1  |                               │                 │            │    └ <enum.property object at 0x7fa9f1107090>
stacks-fief-1  |                               │                 │            └ <EmailTemplateType.VERIFY_EMAIL: 'VERIFY_EMAIL'>
stacks-fief-1  |                               │                 └ <function Environment.get_template at 0x7fa9ea1a32e0>
stacks-fief-1  |                               └ <jinja2.sandbox.ImmutableSandboxedEnvironment object at 0x7fa9da057c10>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/jinja2/environment.py", line 1010, in get_template
stacks-fief-1  |     return self._load_template(name, globals)
stacks-fief-1  |            │    │              │     └ None
stacks-fief-1  |            │    │              └ 'VERIFY_EMAIL'
stacks-fief-1  |            │    └ <function Environment._load_template at 0x7fa9ea1a3240>
stacks-fief-1  |            └ <jinja2.sandbox.ImmutableSandboxedEnvironment object at 0x7fa9da057c10>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/jinja2/environment.py", line 969, in _load_template
stacks-fief-1  |     template = self.loader.load(self, name, self.make_globals(globals))
stacks-fief-1  |                │    │      │    │     │     │    │            └ None
stacks-fief-1  |                │    │      │    │     │     │    └ <function Environment.make_globals at 0x7fa9ea1a34c0>
stacks-fief-1  |                │    │      │    │     │     └ <jinja2.sandbox.ImmutableSandboxedEnvironment object at 0x7fa9da057c10>
stacks-fief-1  |                │    │      │    │     └ 'VERIFY_EMAIL'
stacks-fief-1  |                │    │      │    └ <jinja2.sandbox.ImmutableSandboxedEnvironment object at 0x7fa9da057c10>
stacks-fief-1  |                │    │      └ <function BaseLoader.load at 0x7fa9ea1b0e00>
stacks-fief-1  |                │    └ <jinja2.loaders.FunctionLoader object at 0x7fa9da054150>
stacks-fief-1  |                └ <jinja2.sandbox.ImmutableSandboxedEnvironment object at 0x7fa9da057c10>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/jinja2/loaders.py", line 126, in load
stacks-fief-1  |     source, filename, uptodate = self.get_source(environment, name)
stacks-fief-1  |                                  │    │          │            └ 'VERIFY_EMAIL'
stacks-fief-1  |                                  │    │          └ <jinja2.sandbox.ImmutableSandboxedEnvironment object at 0x7fa9da057c10>
stacks-fief-1  |                                  │    └ <function FunctionLoader.get_source at 0x7fa9ea1b1580>
stacks-fief-1  |                                  └ <jinja2.loaders.FunctionLoader object at 0x7fa9da054150>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/jinja2/loaders.py", line 462, in get_source
stacks-fief-1  |     rv = self.load_func(template)
stacks-fief-1  |          │    │         └ 'VERIFY_EMAIL'
stacks-fief-1  |          │    └ <fief.services.email_template.renderers.EmailSubjectLoader object at 0x7fa9da055c90>
stacks-fief-1  |          └ <jinja2.loaders.FunctionLoader object at 0x7fa9da054150>
stacks-fief-1  |   File "/usr/local/lib/python3.11/site-packages/fief/services/email_template/renderers.py", line 106, in __call__
stacks-fief-1  |     return self.templates_map[name].subject
stacks-fief-1  |            │    │             └ 'VERIFY_EMAIL'
stacks-fief-1  |            │    └ {'BASE': <fief.models.email_template.EmailTemplate object at 0x7fa9da01f490>, 'WELCOME': <fief.models.email_template.EmailTem...
stacks-fief-1  |            └ <fief.services.email_template.renderers.EmailSubjectLoader object at 0x7fa9da055c90>
stacks-fief-1  | 
stacks-fief-1  | KeyError: 'VERIFY_EMAIL'
stacks-fief-1  | 
stacks-fief-1  | 2023-08-18 14:54:19.725 | INFO     | dramatiq.middleware.retries:after_process_message:115 - Retrying message '28957844-9037-41a4-91cb-6649fc8f21e3' in 117985 milliseconds. - {}

Migration is automatic in docker... what do we miss ?

Configuration

tito commented 1 year ago

Look like email template VERIFY_EMAIL is not populated ? image

tito commented 1 year ago

Ok, i needed to do python -m fief.cli workspaces init-email-templates in the docker container. Now it is working.