Настройка аллаута Джанго EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL не работает - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь изменить адрес перенаправления пользователя после подтверждения своего адреса электронной почты, щелкнув ссылку в сообщении с подтверждением.

Я использую Django 2.0.10 с 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'),
...
]

Моя настройка '/' действительно напечатана в консоли, поэтому я думаю, что она воспринимается приложением.Но когда я перехожу по ссылке в электронном письме на страницу (http://localhost:8000/api/v1/rest-auth/registration/account-confirm-email/MTQ:1gpYgM:_KpNYl-nd2iiG0qLIRRdVrmF8SM/) и затем нажимаю кнопку «Подтвердить», я перенаправляюсь на страницу по умолчанию / учетные записи / профиль вместо домашней страницы, как указано EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL.

Этот параметр также, похоже, не имеет никакого эффекта:

ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = False

Я хочу отключить его, поскольку вход в систему не работает - токен недействителен.Возможно, allauth входит в систему по-другому для rest-auth? Я не возражаю, если пользователь должен войти в систему после проверки своего адреса электронной почты, но текущее поведение, при котором пользователь, кажется, вошел в систему, но не вошел, не в порядке.

Что я делаю не так, как я могу настроить направление перенаправления пользователя после подтверждения его адреса электронной почты? Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 04 февраля 2019

После долгих раздумий, я думаю, настройки allauth не работают так, как я ожидал от их имен, и, возможно, не работают как задумано.ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL не означает «перенаправление после входа пользователя».Тесты кода для user.is_authenticated (site-packages / allauth / account / adapter.py), которые в данном контексте, по-видимому, означают «была ли ссылка подтверждения действительной?».

ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION не работает навсе с аутентификацией токена, и в любом случае известно, что не работает, если сеанс изменился.Поэтому я думаю, что для него должно быть установлено значение «Ложь».

ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = Ложь, кажется, иногда приветствуется, но не всегда, и я не выяснил, почему ...

Посмотрим, как email_confirm.HTML шаблон создан, я думаю, что успех всегда будет перенаправлять вас на ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL, а неудача будет держать вас на странице с нерабочей ссылкой, чтобы запросить новое электронное письмо с подтверждением.

Я не могу найти, когда ACCOUNT_EMAIL_CONFIR_UR_UR_URURURUSиспользовать, но установите его на домашней странице.

Возможно, я неправильно понял это, но у меня наконец-то есть какая-то рабочая установка.Это очень грязно, должен быть лучший способ сделать это, но сейчас я возьму все, что позволит мне двигаться дальше.Я закончил тем, что использовал несколько шаблонов allauth для управления аккаунтом, потому что я не могу заставить это работать с rest-auth.

Все еще есть проблема с ошибочными ссылками: в основном я вижу страницу шаблона с ее полезным сообщением,но иногда это просто показывает домашнюю страницу.Но, по крайней мере, это не основной поток и не катастрофа для пользователя.

settings.py: обратите внимание на запись шаблона DIRS для allauth, в противном случае мой пользовательский шаблон не используется

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' - это маршрут в моем интерфейсе, который отображает подтверждающее сообщение и ссылку для входа в систему.

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, изменен надайте рабочую ссылку на сбой

{% 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 %}
...