【问题标题】:Django User Creation successful, but authenticate() returning NoneDjango 用户创建成功,但 authenticate() 返回 None
【发布时间】:2016-07-17 18:15:42
【问题描述】:

我编写了一个自定义页面来创建一个新用户。用户已成功创建,但是如果我尝试使用正确的凭据登录,身份验证将返回 None。

如果我进入 Django Admin,我可以为刚刚创建的用户创建一个新密码,然后登录成功。有什么想法吗?

创建用户函数:

def create_account(request):
if request.method == "POST":
    # Default User Fields
    username = request.POST['username']
    password = request.POST['password']
    email = request.POST['email']
    first_name = request.POST['first_name']
    last_name = request.POST['last_name']


    try:
        user = User.objects.create_user(username,email,password,first_name=first_name, last_name=last_name)
        user.save()
        user_profile = models.User_Profile.objects.create_user_profile(user)
        user_profile.save()
        response = {'success': True}
        return HttpResponse(json.dumps(response))
    except Exception, e:
        response = {'success': False}
        return HttpResponse(json.dumps(response))

登录功能:

def site_login(request):
#TODO: GET THIS WORKING
if request.method == "POST":
    user = authenticate(username=request.POST['username'], password=request.POST['password'])
    if user is not None:
        if user.is_active:
            login(request, user)
            response = {'success':True}
            return HttpResponse(json.dumps(response))
        else:
            response = {'success':False,'message':'Account has been disabled.'}
            return HttpResponse(json.dumps(response))
    else:
        response = {'success':False,'message':'Invalid username or password.'}
        return HttpResponse(json.dumps(response))

【问题讨论】:

标签: django authentication


【解决方案1】:

创建用户时需要使用set_passwordhttps://docs.djangoproject.com/en/1.9/ref/contrib/auth/#django.contrib.auth.models.User.set_password)。尝试做:

def create_account(request):
    if request.method == "POST":
        # Default User Fields
        username = request.POST.get('username')
        password = request.POST.get('password')
        email = request.POST.get('email')
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')

        try:
            # illustrating it out for you
            user = User()
            user.username = username
            user.email = email
            user.set_password(password)
            user.first_name = first_name
            user.last_name = last_name
            user.save()
            user_profile = models.User_Profile.objects.create_user_profile(user)
            user_profile.save()
            response = {'success': True}
            return HttpResponse(json.dumps(response))
        except Exception, e:
            response = {'success': False}
            return HttpResponse(json.dumps(response))

【讨论】:

  • 即使添加了 set_password,我仍然看到“无”返回
猜你喜欢
  • 2015-12-21
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2013-09-10
  • 2014-05-14
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多