Home > Back-end >  NoReverseMatch: Reverse for 'account_confirm_email' not found. [dj-rest-auth]
NoReverseMatch: Reverse for 'account_confirm_email' not found. [dj-rest-auth]

Time:10-15

I am new to Django. I'm trying to implement jet authentication along with social authentication.

I'm following this tutorial https://jkaylight.medium.com/django-rest-framework-authentication-with-dj-rest-auth-4d5e606cde4d

I tried to implement the same but its not working.

I'm getting this error:

django.urls.exceptions.NoReverseMatch: Reverse for 'account_confirm_email' not found. 'account_confirm_email' is not a valid view function or pattern name.

My project level urls.py

from drf_spectacular.views import (
    SpectacularAPIView,
    SpectacularSwaggerView
)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    # path('account/', include('allauth.urls')),
    path('admin/', admin.site.urls),
    path('api/user/', include('user.urls')),
    path('api/schema/', SpectacularAPIView.as_view(), name='api-schema'),
    path(
        'api/docs/',
        SpectacularSwaggerView.as_view(url_name='api-schema'),
        name='api-docs'
    ),
]

My App level urls.py

from django.urls import path, re_path
from dj_rest_auth.registration.views import RegisterView, VerifyEmailView, ConfirmEmailView
from dj_rest_auth.views import LoginView, LogoutView


from user import views

app_name = 'user'

urlpatterns = [
    path('account-confirm-email/<str:key>/', ConfirmEmailView.as_view()),
    path('register/', RegisterView.as_view()),
    path('login/', LoginView.as_view()),
    path('logout/', LogoutView.as_view()),

    path('verify-email/',
         VerifyEmailView.as_view(), name='rest_verify_email'),
    path('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'),
    path('listusers/', views.ListUsers.as_view(), name='list-users'),
]

When I try to register a user. It causes this error.

I'm using dj-rest-auth package to implement authentication.

If I replace the email verification related urls from app level to project level. Then everything is working fine.

What is causing this error ?

CodePudding user response:

For the registration part, you have to use allauth which has some baked-in integrations with dj-rest-auth

also, you would have to add some things in your settings.py:

INSTALLED_APPS = [
    "dj_rest_auth.registration",
    "allauth",
    "allauth.account"
]
AUTHENTICATION_BACKENDS = [
    "allauth.account.auth_backends.AuthenticationBackend",
    "django.contrib.auth.backends.ModelBackend",
]

add these URLs to the urls.py:

urlpatterns = [
    path("signup/", include("dj_rest_auth.registration.urls"))
    path("verify-email/", VerifyEmailView.as_view(), name="rest_verify_email"),
    path(
        "account-confirm-email/",
        VerifyEmailView.as_view(),
        name="account_confirm_email_sent",
    ),
    path(
        "account-confirm-email/<key>/",
        VerifyEmailView.as_view(),
        name="account_confirm_email",
    ),
]

CodePudding user response:

The request is not getting <str:key>. Please check where you are supplying. It can be from view or template.

  • Related