简体   繁体   English

Django的。 身份验证(用户返回无)

[英]Django. Authentication (user returns None)

I'm trying to make sign in form using Django. 我正在尝试使用Django创建登录表单。 So I created a function in views and it looks like this: 所以我在视图中创建了一个函数,它看起来像这样:

def signin(request):
    if request.method == 'POST':
        form = SigninForm(request.POST)
        if form.is_valid():
            login = request.POST.get('login', '')
            password = request.POST.get('password', '')
            user = auth.authenticate(username=login, password=password)
            print(user)
            if user is not None and user.is_active:
                auth.login(request, user)
                return HttpResponse("OK")
            else:
                return HttpResponse("ERROR")
    else:
        form = SigninForm()     
    return render(request, 'signin.html', {'form': form})

and it works (prints OK and print(user) returns the name of the user), but only for the user I created when I did syncdb (superuser). 并且可以正常工作(打印OKprint(user)返回print(user)名),但仅适用于在执行syncdb (超级用户)时创建的用户。

however when I try to create users like this: 但是,当我尝试创建这样的用户时:

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
    else:
        form = SignupForm()
    return render(request, 'signup.html', {'form': form})

it prints ERROR when I try to sign in, and print(user) returns None 当我尝试登录时它会打印ERROR ,并且print(user)返回None

PS 聚苯乙烯

  • I added: AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', ) in my settings.py 我在我的settings.py添加了: AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', )
  • and I can see users created by signup function in my admin page (it looks just like the superuser) 我可以在管理页面中看到通过注册功能创建的用户(看起来就像超级用户一样)

I have no idea what I'm doing wrong. 我不知道我在做什么错。 Will you please help me? 你能帮我吗?

When you use create_user function as 当您使用create_user函数作为

User.objects.create_user(username='username', password='password') User.objects.create_user(用户名='用户名',密码='密码')

, You do not need to do password encrypt before. ,您无需先进行密码加密。

It would be made auto. 它将被设为自动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM