[英]issue with custom adapter and django-allauth
我正在为我的项目使用django-allauth
,并且我正在尝试使用自定义适配器在登录后重定向用户之前对settings.LOGIN_REDIRECT_URL
做一些工作,相关代码:
from allauth.account.adapter import DefaultAccountAdapter
from django.conf import settings
class DispersionAccountAdapter(DefaultAccountAdapter):
def get_login_redirect_url(self, request):
""" Retorna la URL por defecto para redirecciónar,
esta lo hace formateando la cadena con el nombre del usuario.
"""
if request.user.is_authenticated():
return settings.LOGIN_REDIRECT_URL.format(
username=request.user.username)
else:
return "/"
因此,我按照文档说明对 settings.py 进行了更改:
LOGIN_REDIRECT_URL = "/{username}/all"
ADAPTER = "dispersion.apps.adapter.DispersionAccountAdapter"
ACCOUNT_ADAPTER = "dispersion.apps.adapter.DispersionAccountAdapter"
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
LOGIN_URL = "/main/login"
因此,当我运行服务器并尝试登录时,我被重定向到http://127.0.0.1:8000/{username}/all
而不是http://127.0.0.1:8000/jorge/all
(如果是我的用户名)。 我不确定我的设置有什么问题。 我尝试了以下没有任何问题:
$ python2 manage.py shell
In [1]: from dispersion.apps.adapter import DispersionAccountAdapter
In [2]: adapter = DispersionAccountAdapter()
非常感谢任何建议或修复! :D
allauth.account.adapter.DefaultAccountAdapter 不提供名为“get_login_redirect_url”的方法,因此自定义适配器中的方法永远不会被调用。
该方法位于 allauth.utils.py
两种可能的解决方案:
要么
对于此解决方案,您需要使用自定义登录视图。 在您的自定义登录视图中,使用在“form_class”参数中设置的登录表单类调用 allauth 登录视图。 有关详细信息,请参阅allauth.account.views.login 。
代码摘要(所提供的代码未在小型 stackoverflow 窗口中进行测试和编写,因此它绝对不会复制'n'paste,它只是一个用于阐明目标的小“操作方法”指南)
网址.py:
urlpatterns = patterns('',
...
(r'^accounts/login/', my_login_view),
(r'^accounts/', include('allauth.urls')),
...
)
表格.py
from allauth.account.forms import LoginForm as AllauthLoginForm
class MyCustomLoginForm(AllauthLoginForm)
def login(self, request, redirect_url=None):
# the original response
response = super(MyCustomLoginForm, self).login(request, redirect_ur)
if self.user.is_authenticated():
r = settings.LOGIN_REDIRECT_URL.format(
username=self.user.username)
else:
r = "/"
return HttpResponseRedirect(r)
视图.py
from allauth.account.views import login as allauth_login
def my_login_view(request):
return allauth_login(request, form_class=MyCustomLoginForm)
您使用的 0.8.3 尚不支持get_login_redirect_url
-- 在 0.8.3 之后添加了对此功能的支持。
参见: https : //github.com/pennersr/django-allauth/blob/11ee262c9b9ec4923e8f3a34c71a05dad1dbccbb/ChangeLog#L1-L9
如果您需要此功能,我建议您使用 github 上的开发版本。
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
您需要将以下行添加到表单中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.