8

Ich verwende Django mit Django REST framework als Backend und AngularJS am Frontend.Wie activate_url auf django-allauth anpassen?

Für die Benutzerverwaltung verwende ich django-rest-auth, die Django-Allauth für die Benutzerverwaltung verwendet. Als Basis habe ich Demo von django-rest-auth benutzt.

Das Problem ist, nach dem Schild auf, wenn Sie versuchen, die E-Mail es E-Mail mit der Aktivierung url sendet, um zu überprüfen: 127.0.0.1:8000/account/confirm-email/yhca8kmijle0ia7k3p7ztbvnd2n1xepn9kyeuaycmlzll5xw19ubjarnvjrot7eu/

wo * 127.0.0.1:8000 ist das Django Backend.

Aber in meinem Fall sollte es URL so etwas wie localhost:9000/#/verifyEmail/akv2dcvrfnk9ex5fho9jk0xx1ggtpfazmi8sfsoi2sbscoezywfp7kzcyqnizrc0 senden. Damit diese Überprüfung von Frontend durchgeführt wird, wo localhost:9000 ist meine AngularJS-Frontend.

Gibt es eine Möglichkeit, activate_url auf django-allauth anzupassen?

+0

Haben Sie diese Frage gesehen? https://stackoverflow.com/questions/24128433/django-allauth-how-to-modify-email-confirmation-url – ferrangb

Antwort

2

konnten keine Dokumente finden spezifizieren diese (sicher, dass sie dort irgendwo sein muss), aber wenn man github sie eine URL nur tun Reverse auf "account_confirm_email"

Sie brauchen nur eine URLPATTERN mit dem name="account_confirm_email" param hinzuzufügen, nachdem sie, etwa so:

from allauth.account.views import confirm_email 

ulrpatterns= patterns('', 
    ... 
    url(r'^rest-auth/', include('rest_auth.urls')), 
    url(r'^verify-email/(?P<key>\w+)/$', 
     confirm_email, 
     name="account_confirm_email"), 
) 

Das Problem dabei ist, dass Sie nun direkt die Abhängigkeit von einer Abhängigkeit Adressierung. Wenn eine neuere Version von django-restauth dies nicht nutzt, könnte es bei dir kaputt gehen.

Wenn Sie offen für die Verwendung anderer Bibliotheken sind, verwende ich derzeit mit DRF und habe es ziemlich einfach gefunden. Vielleicht entspricht es Ihren Bedürfnissen.

4

ich durch Überschreiben der DefaultAccountAdapter Klasse und das Überschreiben der send_mail Methode wie angegeben in der django-allauth doc haben es geschafft, die Aktivierung vom Frontend zu machen:

Wenn dies, Sie nicht Ihren Bedürfnissen entsprechen kann Haken Sie Ihren eigenen kundenspezifischen Mechanismus, durch den send_mail Methode des Kontos Adapter überschrieben (allauth.account.adapter.DefaultAccountAdapter)

ich schrieb zuerst die uRL im Backend, die ich verwenden, um eine E-Mail bestätigen:

api_patterns = [ 
... 
url(r'^verify-email/(?P<key>\w+)/$', 
     confirm_email, name="account_confirm_email"), 
... 
] 

I angegeben dann den benutzerdefinierten Adapter und die URL-Frontend in settings.py wie folgt:

ACCOUNT_ADAPTER = 'API.adapter.DefaultAccountAdapterCustom' 
URL_FRONT = 'http://localhost:9000/' 

und schrieb dies im adapter.py von meiner App:

from allauth.account.adapter import DefaultAccountAdapter 
from django.conf import settings 

class DefaultAccountAdapterCustom(DefaultAccountAdapter): 

    def send_mail(self, template_prefix, email, context): 
     context['activate_url'] = settings.URL_FRONT + \ 
      'verify-email/' + context['key'] 
     msg = self.render_mail(template_prefix, email, context) 
     msg.send() 

Die URL-Aktivierung in der gesendeten E-Mail wird nun wie folgt aussehen: http://127.0.0.1:9000/verify-email/<key>/

Ich habe die activate_url zu t geändert Er URL_FRONT Zeichenfolge ich in 10 angegeben und den Schlüssel angehängt, um eine Anfrage vom Frontend auf die URL zu machen, die ich früher schrieb (sagen wir http://localhost:8000/verify-email/<key>).(Zuvor ACCOUNT_CONFIRM_EMAIL_ON_GET zu True, um eine E-Mail nur durch eine Anfrage zu erhalten)