Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ImproperlyConfigured at /rest-auth/registration/account-confirm-email

I'm using django-rest-auth for user signup and verify email. I'm able to successfully send the email when a user signs up. Howvever, on email verification, I'm getting this error with the following traceback:

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in dispatch
  87.         return handler(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in get
  155.         return self.render_to_response(context)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in render_to_response
  130.             template=self.get_template_names(),
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in get_template_names
  142.                 "TemplateResponseMixin requires either a definition of "

Exception Type: ImproperlyConfigured at /rest-auth/registration/account-confirm-email/vjohhnrf6xpkmn1jxbzaopdn0g79tdyofumeeuyuehcuja8slyz7nzq1idyifcqk/
Exception Value: TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'

Any idea on how to fix this ?

like image 954
Saurabh Verma Avatar asked Apr 19 '15 03:04

Saurabh Verma


3 Answers

While Ricardo's answer is correct, it didn't do much to help me solve my problem. This is what I needed to do for my master urls.py:

from allauth.account.views import confirm_email
.....
url(r'^accounts-rest/registration/account-confirm-email/(?P<key>.+)/$', confirm_email, name='account_confirm_email'),

Make sure that the beginning of the url spec starts with whatever path you are using for allauth REST calls.

Of course, the above is for using the built-in view handling the confirmation.

like image 150
velis Avatar answered Oct 20 '22 16:10

velis


When you use confirmation email you have two ways to do it.

Using the specified by the API or creating yours. By default it uses django-allauth and a TemplateView on reverse can be used.

If you create yours, you may have to override account_confirm_email and then post to verification_mail.

In urls.py it is defined just reverse so, depending on what you are trying to do you will have first to create your own account_confirm_email, get the required key and post it to verify-email. Here there is more information about this bug.

like image 6
Ricardo Burillo Avatar answered Oct 20 '22 16:10

Ricardo Burillo


For the new Django versions re_path url resolver method works properly with this (?P.+) url regex.

from django.urls import re_path

re_path('rest-auth/registration/account-confirm-email/(?P<key>.+)/', CustomConfirmEmailView.as_view(), name='account_confirm_email')

Also I have customized allauth ConfirmEmailView get() method in order to redirect properly

from allauth.account.views import ConfirmEmailView
from django.contrib.auth import get_user_model

class CustomConfirmEmailView(ConfirmEmailView):
    def get(self, *args, **kwargs):
        try:
            self.object = self.get_object()
        except Http404:
            self.object = None
        user = get_user_model().objects.get(email=self.object.email_address.email)
        redirect_url = reverse('user', args=(user.id,))
        return redirect(redirect_url)
like image 3
kapitoshka Avatar answered Oct 20 '22 17:10

kapitoshka