2015-02-11 13 views
7

Ich verwende allauth und nach der Registrierung erhält der Benutzer eine E-Mail mit der Aufforderung, auf einen Link zu klicken, um seine E-Mail-Adresse zu überprüfen. Ich möchte den Wert dieses Links ändern.Wie ändere ich den Wert von activate_url in django allauth?

würde Ich mag es

http://localhost:8001/account/confirm-email/hy72ozw8b1cexuw2dsx4wwrmgzbmnyxx4clswh67tcvgyovg/ 

zu

http://localhost:8001/index.html#/verifyEmail/hy72ozw8b1cexuw2dsx4wwrmgzbmnyxx4clswh67tcvgyovg/ 

von

ändern Wie kann ich das tun? Ich sehe, dass activate_url Wert wird in email_confirmation_text.txt

Antwort

7

Sie haben nicht wirklich allauth haben außer Kraft zu setzen 's urls.py, um dies zu erreichen, alles, was Sie tun müssen, ist Ihre Version von URL angeben nach einschließlich allauth' s Urls:

from django.conf.urls import patterns, include, url 
from allauth.account.views import confirm_email 

urlpatterns = patterns('', 
    ... 
    url(r'^accounts/', include('allauth.account.urls')), 
    url(r'^index.html#/verifyEmail/(?P<key>\w+)/$', confirm_email, 
     name="account_confirm_email"), 
    # but I would recommend changing that url: 
    url(r'^verify-email/(?P<key>\w+)/$', confirm_email, 
     name="account_confirm_email"), 
    ... 
) 

Hier ist ein schöner Artikel über URLs: Cool URIs don't change

+0

Ich bin froh, dass Sie das hinzugefügt haben. Ich dachte darüber nach und fand, dass ich nachdachte, ob es funktionieren würde, aber ich hatte keine Zeit, es richtig zu testen. –

+1

Es gibt ein weiteres Problem hier, alles nach '#' in einer URL wird nicht durch einen Browser an den Server gesendet. Die obige Lösung funktioniert also erst, wenn das '#' aus der URL entfernt wird. @ Birdy, brauchst du wirklich das '#'? Wenn nicht, einfach entfernen und alles würde perfekt funktionieren. –

+0

@DebanshuKundu, sehr guter Punkt, alles nach '#' in URL wird nicht an den Server übergeben, es sei denn es ist escape to '% 23'. Außerdem gibt es keinen Grund, "index.html" oder ".html" in Djangos URLs zu verwenden. –

3

verwendete ich habe nicht django-allauth verwendet oder in einem meiner Projekte aufgenommen, aber nur Stochern in ihren Quellcode sagt mir folgendes:

Die send method nur macht einen grundlegenden Aufruf urlresolvers.reverse, was bedeutet, dass es die URL von account/urls.py wie definiert here erstellt.

Als solche haben Sie drei Möglichkeiten:

  1. überschreiben ihre urls.py, die Sie jedes Mal, wenn Sie das Paket (igitt) aktualisieren wiederholen müssen.
  2. Erheben Sie ein Problem auf ihrem GitHub und sehen Sie, ob sie dies als eine Konfigurationsoption hinzufügen werden, anstatt sie "hart zu codieren", was sie getan haben.
  3. Versuchen Sie, ihre EmailConfirmation Modell Unterklasse, Überschreiben ihrer Sendemethode mit etwas passender für Ihr Projekt, und sehen, ob Sie es anstelle Ihres zu nutzen (keine Ahnung, ob dies praktikabel ist oder nicht).