django allauth 设置 EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL 不起作用
django allauth setting EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL doesn't work
我正在尝试更改用户通过单击确认电子邮件中的 link 确认其电子邮件地址后重定向到的位置。
我将 Django 2.0.10 与 allauth、rest-auth 和 rest-framework 一起使用。对于电子邮件验证,我使用默认的 allauth 视图。
在我的 settings.py 中,我设置了以下内容:
INSTALLED_APPS = [
'api',
'dynamic_rest',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'django.contrib.sites',
'allauth.account',
'allauth.socialaccount',
'rest_auth.registration',
'users',
'lists',
'rest_auth',
'allauth', # needs to be at the end so custom templates are found first
]
EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = '/'
print('EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL')
print(EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL)
urls.py
from allauth.account.views import confirm_email
urlpatterns = [
re_path(r'^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$', confirm_email,
name='account_confirm_email'),
...
]
我的设置“/”确实打印在控制台中,所以我认为它正在被应用程序拾取。但是当我按照电子邮件中的 link 转到页面 (http://localhost:8000/api/v1/rest-auth/registration/account-confirm-email/MTQ:1gpYgM:_KpNYl-nd2iiG0qLIRRdVrmF8SM/) 然后单击 'confirm' 按钮时,我被重定向到默认页面 /accounts/profile 而不是主页EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL.
指定的页面
此设置似乎也没有任何效果:
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = 假
我想禁用它,因为登录不起作用 - 令牌无效。也许 allauth 的登录方式与 rest-auth 不同?我不介意用户在验证其电子邮件地址后是否必须登录,但用户当前看似已登录但实际上并未登录的行为是不正确的。
我哪里做错了,如何在确认用户的电子邮件地址后自定义将用户重定向到的位置?非常感谢您的帮助!
经过大量调整后,我认为 allauth 设置无法按照我对它们名称的预期方式工作,并且可能无法按预期工作。 ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL 并不代表 "redirect after the user logged in"。代码在 user.is_authenticated (site-packages/allauth/account/adapter.py) 上测试,在这种情况下似乎意味着 "was the confirmation link valid?".
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION 似乎对令牌身份验证根本不起作用,而且如果会话已更改,则无论如何都知道不起作用。所以我认为必须设置为False。
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = False 有时似乎很荣幸,但并非总是如此,我还没有找出原因...
查看 email_confirm.html 模板的构建方式,我认为成功总是会将您重定向到 ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL,而失败将使您停留在无法正常工作的页面上 link请求新的确认电子邮件。
我找不到什么时候可以使用ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL,但已将其设置为主页。
我可能误解了这一点,但我终于得到了一种可以正常工作的设置。它非常笨拙,必须有更好的方法来执行此操作,但现在我会采取任何让我继续前进的方法。我最终使用了多个 allauth 模板进行帐户管理,因为我无法使用 rest-auth 进行此操作。
失败 links 仍然存在问题:大多数时候我看到的是模板页面及其有用的消息,但有时它只显示主页。但至少那不是主流,对用户来说不是灾难。
settings.py:注意allauth的模板DIRS条目,否则我的自定义模板没有用
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'assets'),
os.path.join(BASE_DIR, 'templates', 'allauth')],
...
]
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = False
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = '/'
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = '/verified'
'verified' 是我前端显示确认消息和 link 登录的路由。
urls.py
from django.views.generic import TemplateView
urlpatterns = [
...
re_path(r'^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$', confirm_email,
name='account_confirm_email'),
]
templates/account/email_confirm.html,已修改为在失败时提供工作 link
{% extends "account/base.html" %}
{% load i18n %}
{% load account %}
{% block head_title %}{% trans "Confirm E-mail Address" %}{% endblock %}
{% block content %}
<h1>{% trans "Confirm E-mail Address" %}</h1>
{% if confirmation %}
{% user_display confirmation.email_address.user as user_display %}
<p>{% blocktrans with confirmation.email_address.email as email %}Please confirm that <a href="mailto:{{ email }}">{{ email }}</a> is an e-mail address for user {{ user_display }}.{% endblocktrans %}</p>
<form method="post" action="{% url 'account_confirm_email' confirmation.key %}">
{% csrf_token %}
<button type="submit">{% trans 'Confirm' %}</button>
</form>
{% else %}
{% url 'account_email' as email_url %}
<p>{% blocktrans %}The email confirmation link expired or is invalid. Please <a href="/login/">login</a> and request a new confirmation email from your user account.{% endblocktrans %}</p>
{% endif %}
{% endblock %}
我正在尝试更改用户通过单击确认电子邮件中的 link 确认其电子邮件地址后重定向到的位置。
我将 Django 2.0.10 与 allauth、rest-auth 和 rest-framework 一起使用。对于电子邮件验证,我使用默认的 allauth 视图。
在我的 settings.py 中,我设置了以下内容:
INSTALLED_APPS = [
'api',
'dynamic_rest',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'django.contrib.sites',
'allauth.account',
'allauth.socialaccount',
'rest_auth.registration',
'users',
'lists',
'rest_auth',
'allauth', # needs to be at the end so custom templates are found first
]
EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = '/'
print('EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL')
print(EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL)
urls.py
from allauth.account.views import confirm_email
urlpatterns = [
re_path(r'^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$', confirm_email,
name='account_confirm_email'),
...
]
我的设置“/”确实打印在控制台中,所以我认为它正在被应用程序拾取。但是当我按照电子邮件中的 link 转到页面 (http://localhost:8000/api/v1/rest-auth/registration/account-confirm-email/MTQ:1gpYgM:_KpNYl-nd2iiG0qLIRRdVrmF8SM/) 然后单击 'confirm' 按钮时,我被重定向到默认页面 /accounts/profile 而不是主页EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL.
指定的页面此设置似乎也没有任何效果:
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = 假
我想禁用它,因为登录不起作用 - 令牌无效。也许 allauth 的登录方式与 rest-auth 不同?我不介意用户在验证其电子邮件地址后是否必须登录,但用户当前看似已登录但实际上并未登录的行为是不正确的。
我哪里做错了,如何在确认用户的电子邮件地址后自定义将用户重定向到的位置?非常感谢您的帮助!
经过大量调整后,我认为 allauth 设置无法按照我对它们名称的预期方式工作,并且可能无法按预期工作。 ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL 并不代表 "redirect after the user logged in"。代码在 user.is_authenticated (site-packages/allauth/account/adapter.py) 上测试,在这种情况下似乎意味着 "was the confirmation link valid?".
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION 似乎对令牌身份验证根本不起作用,而且如果会话已更改,则无论如何都知道不起作用。所以我认为必须设置为False。
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = False 有时似乎很荣幸,但并非总是如此,我还没有找出原因...
查看 email_confirm.html 模板的构建方式,我认为成功总是会将您重定向到 ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL,而失败将使您停留在无法正常工作的页面上 link请求新的确认电子邮件。
我找不到什么时候可以使用ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL,但已将其设置为主页。
我可能误解了这一点,但我终于得到了一种可以正常工作的设置。它非常笨拙,必须有更好的方法来执行此操作,但现在我会采取任何让我继续前进的方法。我最终使用了多个 allauth 模板进行帐户管理,因为我无法使用 rest-auth 进行此操作。
失败 links 仍然存在问题:大多数时候我看到的是模板页面及其有用的消息,但有时它只显示主页。但至少那不是主流,对用户来说不是灾难。
settings.py:注意allauth的模板DIRS条目,否则我的自定义模板没有用
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'assets'),
os.path.join(BASE_DIR, 'templates', 'allauth')],
...
]
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = False
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = '/'
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = '/verified'
'verified' 是我前端显示确认消息和 link 登录的路由。
urls.py
from django.views.generic import TemplateView
urlpatterns = [
...
re_path(r'^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$', confirm_email,
name='account_confirm_email'),
]
templates/account/email_confirm.html,已修改为在失败时提供工作 link
{% extends "account/base.html" %}
{% load i18n %}
{% load account %}
{% block head_title %}{% trans "Confirm E-mail Address" %}{% endblock %}
{% block content %}
<h1>{% trans "Confirm E-mail Address" %}</h1>
{% if confirmation %}
{% user_display confirmation.email_address.user as user_display %}
<p>{% blocktrans with confirmation.email_address.email as email %}Please confirm that <a href="mailto:{{ email }}">{{ email }}</a> is an e-mail address for user {{ user_display }}.{% endblocktrans %}</p>
<form method="post" action="{% url 'account_confirm_email' confirmation.key %}">
{% csrf_token %}
<button type="submit">{% trans 'Confirm' %}</button>
</form>
{% else %}
{% url 'account_email' as email_url %}
<p>{% blocktrans %}The email confirmation link expired or is invalid. Please <a href="/login/">login</a> and request a new confirmation email from your user account.{% endblocktrans %}</p>
{% endif %}
{% endblock %}