проверка электронной почты пользователей с использованием django rest auth без ошибок - PullRequest
0 голосов
/ 25 октября 2019

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

при переходе по ссылке для проверки электронной почты

NoReverseMatch at /account-confirm-email/MjI:1iNmbO:BWhf4WhFzVR99YVYUqCB6X2CbcE/
Reverse for 'account_email' not found. 'account_email' is not a valid view function or pattern name.

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.sites',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'rest_auth.registration',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.facebook',
    'users',
]


ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_LOGOUT_ON_GET = True

ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 1
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 5
ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 86400 # 1 day in seconds
ACCOUNT_LOGOUT_REDIRECT_URL ='/accounts/login/'
LOGIN_REDIRECT_URL = '/accounts/profile'
SOCIALACCOUNT_EMAIL_VERIFICATION = 'none'

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'test@gmail.com'
EMAIL_HOST_PASSWORD = 'test'
DEFAULT_FROM_EMAIL = 'test@gmail.com'
DEFAULT_TO_EMAIL = EMAIL_HOST_USER

EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = '/'

urls.py

from rest_auth.registration.views import VerifyEmailView

urlpatterns = [
    path('admin/', admin.site.urls),
    url('api/rest-auth/', include('rest_auth.urls')),
    url('api/rest-auth/registration/', include('rest_auth.registration.urls')),
    re_path(r'^account-confirm-email/$', VerifyEmailView.as_view(), name='account_email_verification_sent'),
    re_path(r'^account-confirm-email/(?P<key>[-:\w]+)/$', VerifyEmailView.as_view(), name='account_confirm_email'),
]

Быстрое исправление, которое я сделал, которое исправило ошибку BIT, но сделало ее НЕ API отдыха, добавляла несколько URL, как показано ниже

    from allauth.account import views

    url(r"^email/$", views.email, name="account_email"),
    url(r'^accounts/', include('allauth.urls')),

    url(r"^signup/$", views.signup, name="account_signup"),
    url(r"^login/$", views.login, name="account_login"),
    url(r"^logout/$", views.logout, name="account_logout"),

    url(r"^password/change/$", views.password_change,
        name="account_change_password"),
    url(r"^password/set/$", views.password_set, name="account_set_password"),

    url(r"^inactive/$", views.account_inactive, name="account_inactive"),

    # E-mail
    url(r"^email/$", views.email, name="account_email"),
    url(r"^confirm-email/$", views.email_verification_sent,
        name="account_email_verification_sent"),
    url(r"^confirm-email/(?P<key>[-:\w]+)/$", views.confirm_email,
        name="account_confirm_email"),

    # password reset
    url(r"^password/reset/$", views.password_reset,
        name="account_reset_password"),
    url(r"^password/reset/done/$", views.password_reset_done,
        name="account_reset_password_done"),
    url(r"^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$",
        views.password_reset_from_key,
        name="account_reset_password_from_key"),
    url(r"^password/reset/key/done/$", views.password_reset_from_key_done,
        name="account_reset_password_from_key_done"),

, поскольку вышеприведенное не полностью решило проблему, пожалуйста, как можно безошибочно проверить учетную запись и по-прежнему поддерживать API отдыха?

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Я столкнулся с этой проблемой несколько месяцев назад, и у меня возникла небольшая проблема с поиском этой проблемы.

Приложение allauth.account создает (или должно создавать) две таблицы в вашей базе данных: account_emailaddress и account_emailconfirmation. Обратный поиск ищет запись в этих таблицах, чтобы проверить адрес электронной почты, а затем установить учетную запись для проверки. Я обнаружил, что во время миграции эти две таблицы были созданы неправильно. Я не уверен, почему возникла эта проблема (если честно, я все еще немного новичок в этом).

Мне пришлось закомментировать приложение allauth.account, запустить миграцию, а затем восстановитьприложение и запустить другую миграцию. Это решило проблему для меня.

0 голосов
/ 03 ноября 2019

Это Мишель из Удеми.

Я проверил ваш вопрос, и, похоже, у кого-то возникла та же проблема, и он нашел решение, здесь: Обратное для account_email_verification_sent 'не найдено. account_email_verification_sent не является допустимой функцией представления или именем шаблона

В частности, проблема должна заключаться в способе обработки файла urls.py: https://stackoverflow.com/a/48487631/10221214

Я вижучто вы уже проделали некоторую работу над файлом urls.py (хорошо), но, возможно, вместо того, чтобы добавлять так много URL-путей, которые могут вызвать проблемы (например, у вас есть два пути с name = "account_email", что неправильно! ) вы можете попробовать скопировать те, которые были добавлены в другом вопросе, который я связал.

Еще одна вещь, которую вы можете сделать, это проверить хранилище пакета, который вы используете на GitHub, и оттуда простонайдите сообщение об ошибке и прочитайте соответствующий код.

Пожалуйста, держите меня в курсе!

Мишель

0 голосов
/ 25 октября 2019

Вот как я решил эту проблему.

в users.views У меня есть такое представление

from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view()
def null_view(request):
    return Response(status=status.HTTP_400_BAD_REQUEST)

, затем импортируйте нулевое представление в URL

path('rest-auth/registration/account-confirm-email/', null_view, name='account_confirm_email'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...