当前位置: 首页 > 知识库问答 >
问题:

登录,在同一页面注册django(多表单身份验证)?我可以注册……为什么登录时在meassage中显示无效凭据

酆茂才
2023-03-14
***

维尤斯。PY 这是 views.py 我可以登录但无法登录,它显示无效凭据

'def login_user(request): if request.method=='POST':

        if request.POST.get('submit')=='sign_up':
            
            username=request.POST.get('name')
            email=request.POST.get('email')
            password=request.POST.get('password')
            
            if User.objects.filter(email=email).exists():                             # Condition for same email id if already exists
                messages.warning(request,'Email already exists')
            else:
                user =User(email=email,password=password,username=username)
                user.set_password(password)                                             #since raw passwords are not saved therefore needs to set in this method
                user.save()
                messages.success(request,'User has been registered successfully')      #Dispalys message that user has been registerd 
            return redirect('login')

        elif request.POST.get('loginsubmit')=='sign_in':
            email = request.POST['email']
            password = request.POST['password']
            user = authenticate(request, email=email, password=password)
            if user is not None:
                login(request, user)
                return redirect ('/')
            else:
                messages.warning(request,'Invalid credentials')
        # print(email,password,username)
    
        
    return render (request,'login.html')`



LOGIN.html



=======

`//<section id="form"><!--form-->
        <div class="container">
            <div class="row">
                <div class="col-sm-4 col-sm-offset-1">
                    <div class="login-form"><!--login form-->
                        <h2>Login to your account</h2>
                        <form method="POST" action="login">
                            {% csrf_token %}
                            <input type="email" placeholder="Email Address" id="validationDefault01" name="email" required>
                            <input type="password" placeholder="Password" id="validationDefault02" name="password" required>
                            <span>
                                <input type="checkbox" class="checkbox">
                                Keep me signed in
                            </span>
                            <button type="submit" name='loginsubmit' value='sign_in' class="btn btn-default">Login</button>
                        </form>
                    </div><!--/login form-->
                </div>
                <div class="col-sm-1">
                    <h2 class="or">OR</h2>
                </div>
                <div class="col-sm-4">


   
   
    {% block body %}

    <body>
        {% for message in messages %}
    <section>
        <div class=" container alert alert-{{message.tags}} alert-dismissible" role="alert">
        <strong>Message!</strong> {{message}}
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span>
      </div>
    </section>
       {% endfor %}
       
      


        <section id="form"><!--form-->
            <div class="container">
                <div class="row">
                    <div class="col-sm-4 col-sm-offset-1">
                        <div class="login-form"><!--login form-->
                            <h2>Login to your account</h2>
                            <form method="POST" action="login">
                                {% csrf_token %}
                                <input type="email" placeholder="Email Address" id="validationDefault01" name="email" required>
                                <input type="password" placeholder="Password" id="validationDefault02" name="password" required>
                                <span>
                                    <input type="checkbox" class="checkbox">
                                    Keep me signed in
                                </span>
                                <button type="submit" name='loginsubmit' value='sign_in' class="btn btn-default">Login</button>
                            </form>
                        </div><!--/login form-->
                    </div>
                    <div class="col-sm-1">
                        <h2 class="or">OR</h2>
                    </div>
                    <div class="col-sm-4">
                        <div class="signup-form"><!--sign up form-->
                            <h2>New User Signup!</h2>
                            <form method="POST" action="login">
                                {% csrf_token %}
                                <input type="text" placeholder="Name" id="validationDefault05" name="name" required>
                                <input type="email" placeholder="Email Address" id="validationDefault03" name="email" required>
                                <input type="password" placeholder="Password" id="validationDefault04" name="password" required>
                                <button type="submit" class="btn btn-default" name='submit' value='sign_up'>Signup</button>
                            </form>
                        </div><!--/sign up form-->
                    </div>
                </div>
            </div>
        </section><!--/form-->
        
    </body>
    {% endblock %}

`


共2个答案

匿名用户

它显示无效凭据

因为您的authenticate()返回None

authenticate() 默认使用用户名和密码进行身份验证,并且您提供电子邮件和密码进行身份验证。如果要通过电子邮件和密码进行身份验证,请编写自己的自定义身份验证后端。

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

class CustomEmailBackend(ModelBackend):
    def authenticate(self, request, email=None, password=None, **kwargs):
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(email=email)
        except UserModel.DoesNotExist:
            return None
        else:
            if user.check_password(password):
                return user
        return None

之后,您可以在settings.py中自定义身份验证

AUTHENTICATION_BACKENDS = ['path.to.CustomEmailBackend']

还将您的电子邮件存档unique=True

匿名用户

默认情况下,身份验证是通过身份验证用户模型的用户名字段完成的,您需要在身份验证用户模型中将username_field设置为电子邮件字段。您的身份验证用户模型应如下所示

class User(AbstractBaseUser,PermissionsMixin):
    **fields**
    USERNAME_FIELD = 'email'

相关问题


  • 使用--proxy-user、--keytab和--主体参数在hadoop kerberos中提交火花
  • Kerberos身份验证。钥匙扣和车票
  • 对于基于 kerberos 的身份验证,我们是否需要所有 AD 用户的密钥表条目?
  • 在Windows上为Linux上的Kerberos身份验证创建密钥选项卡
  • kerberos Keytab用于在linux环境中自动化脚本作业
  • Hadoop Oozie shell操作中的kerberos票证和委托令牌使用
  • 如何让 Hadoop 客户端在安全 (Kerberos) 集群中为用户提供正确的凭据
  • 设置ADuser和“用户下次登录时必须更改密码”的问题
  • Active Directory如何模拟用户登录和更改密码
  • 电源外壳服务帐户密码更改登录失败
  • Proguard不处理FXML中的onAction调用
  • Visual Studio Code 中的 JUnit
  • 如何从命令行排除mvn构建路径中的特定苍蝇?
  • 如何从源代码中正确构建keycloak
  • 如何解决“HttpAuthenticationFactory的机制[KEYCLOAK]中没有所需的机制'BASIC'”
  • 如何从 Git 克隆存储库并在 Java 中自动运行 Maven 构建
  • 在服务器上设置SSH身份验证时,Kerberos keytab文件的原因是什么?
  • 当密码包含特殊符号时,使用powershell更改服务的登录帐户
  • java 13 jar文件在java 17中不起作用,收到错误UnafftedClassVersionError
  • 如何让证书链显示在谷歌浏览器上

共有4个答案

鄢开诚
2023-03-14
热门标签
呼延靖
2023-03-14
相关问题
邓焱
2023-03-14

默认情况下,身份验证是通过身份验证用户模型的用户名字段完成的,您需要在身份验证用户模型中将username_field设置为电子邮件字段。您的身份验证用户模型应如下所示

class User(AbstractBaseUser,PermissionsMixin):
    **fields**
    USERNAME_FIELD = 'email'
桂志新
2023-03-14

它显示无效凭据

因为您的authenticate()返回None

authenticate() 默认使用用户名和密码进行身份验证,并且您提供电子邮件和密码进行身份验证。如果要通过电子邮件和密码进行身份验证,请编写自己的自定义身份验证后端。

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

class CustomEmailBackend(ModelBackend):
    def authenticate(self, request, email=None, password=None, **kwargs):
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(email=email)
        except UserModel.DoesNotExist:
            return None
        else:
            if user.check_password(password):
                return user
        return None

之后,您可以在settings.py中自定义身份验证

AUTHENTICATION_BACKENDS = ['path.to.CustomEmailBackend']

还将您的电子邮件存档unique=True

 类似资料:
  • 大家好,我对FireBase创建用户和注册用户有问题。下面是注册和登录的代码。我得到空指针异常,无法理解原因。。初始化完成了,但经过了这么多天的努力,还是弄不明白。 注册: 正在发布注册活动的日志错误: java.lang.com.google.android.gms.internal.zzdvv.zzb(未知来源)在com.google.android.gms.internal.zzdwc.zz

  • 我试着用laravel做一个登录/注册的简单应用。。。我目前使用的是5.2版本的laravel。 在路线上,我写道: 所以现在当我尝试注册用户在localhost:8888/auth/register-我填写字段,但当我点击注册然后我得到错误消息: 用户中的FatalErrorException。php第8行:找不到类“lightlight\Foundation\Auth\User” 那么我如何在

  • 本文向大家介绍Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册,包括了Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册的使用技巧和注意事项,需要的朋友参考一下 动态验证:(不需要建Model模型) 1.建一个控制器,做表单操作(包含验证) 2.对应控制器方法的html页面: ajax:(不需要建Model模型) 1.建一个控制器,做表单操作(包含验证) 2.

  • 如果你已有幕布,直接登录即可。如果还没有账号,可以使用手机号码注册幕布账号,也可以通过QQ、微信直接注册并登录。 注:微信登录方式需要手机上安装有微信。 账号设置与绑定 登录幕布后,点左上角的头像或者轻按屏幕从左往右滑动,选择「应用设置 - 账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解除绑定需要在电脑上登录

  • 在首页点击注册进入注册页面,你可以使用手机号码注册幕布账号,也可以通过QQ、微信账户直接创建账号并登录。 账号设置与绑定 登录幕布后,点击右上角处用户头像,在下拉菜单中选择「账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号,查看账号是否为高级版以及高级版到期时间。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解绑最后一个登录方式后,账号将无法登录,请注意将文档

  • 注册 / 登录 1.注册 注册入口: 访问 http://www.aikf.com/ 点击右上角注册按钮 输入注册手机号、图形验证码、手机验证码等进行注册 其他注册入口:手机登录http:/www.aikf.com/ 爱客服官方微信公众号注册:点击立即注册 2.登录 登录入口: 访问http://www.aikf.com/ 点击登录 输入用户名及登录密码,点击登录(见下图) 2.修改密码 在登录入