【问题标题】:password_set signal not working in Django allauthpassword_set 信号在 Django allauth 中不起作用
【发布时间】:2018-06-26 03:55:30
【问题描述】:

我想做什么?

在用户第一次设置密码后,我试图将新用户重定向到登录对话框。 (我这样做是因为移动用户设置了密码 Django 隐式注销用户)

有什么问题?

由于某种原因,password_set 信号似乎不起作用。即发送函数loginAfterPassChange 没有被执行。

我的代码:

如何设置密码

views.py:

@receiver(user_logged_in)
def getFirstTimePass(user, request, **kwargs): #this works
    if user.profile.provider != '' and user.profile.firstTimeLogin:
        user.profile.firstTimeLogin = False
        user.profile.save()
        raise ImmediateHttpResponse(render(request, 'index.html', {'type': user.profile.provider, 'email': user.email}))

@receiver(password_set)
def loginAfterPassChange(request, user, **kwargs): #this doesn't work
    data = {'msg': 'Please login with your new password.'}
    return HttpResponse(data)

def setPassword(request): #this works
    data = {'errMsg': 'Something went wrong.'}
    if not request.user.has_usable_password():
            password = request.POST.get('password')         
            request.user.set_password(password)
            request.user.save()
            data['errMsg'] = ''
    return JsonResponse(data)   

urls.py:

from django.conf.urls import url
from .import views

urlpatterns = [
url(r'^updatePro', views.setPassword, name='updatePro') 
]

models.py:

class Profile(models.Model):
   user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)  
   provider = models.CharField(max_length=256, default='')
   firstTimeLogin = models.BooleanField(default=True)

if user.profile.provider != '' 检查用户是使用社交帐户还是本地帐户登录。

【问题讨论】:

    标签: django django-allauth


    【解决方案1】:

    您不能为此使用信号。 Django 不对信号的返回值做任何事情,所以它不会重定向。这根本不是信号的用途。您应该在视图中包含所有这些逻辑。

    【讨论】:

    • 不仅return不起作用,整个功能也不起作用。如果我在返回之前写print "Daniel Roseman",我不会在控制台中看到它。
    • 什么是password_set?它是在哪里定义的?
    • password_set 是第一次成功设置密码时发送的 django allauth 信号。 django-allauth.readthedocs.io/en/latest/signals.html
    • 当您使用全身份验证流程设置密码时,您并没有这样做。
    • 我不明白你。你的意思是我如何设置密码?
    猜你喜欢
    • 2021-04-21
    • 2018-12-29
    • 2015-01-22
    • 2011-09-03
    • 2019-06-26
    • 2014-07-23
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多