>source

***

VEIWS.PY 이것은 view.py입니다. 로그인할 수 있지만 로그인할 수 없습니다. 잘못된 자격 증명이 표시됩니다.


`def login_user(요청): 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">&amp;
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 %}

< div class="signup-form">< !--가입 양식--> < h2>신규 사용자 가입! < form method="POST" action="login"> {% csrf_token %} < 입력 유형="텍스트" 자리 표시자="이름" id="validationDefault05" 이름="이름" 필수> < input type="email" placeholder="이메일 주소" id="validationDefault03" name="이메일" 필수> < 입력 유형="비밀번호" 자리 표시자="비밀번호" id="validationDefault04" name="비밀번호" 필수> < 버튼 유형="제출" 클래스="btn btn-default" 이름='제출' 값='sign_up'>가입< /버튼> < /양식> < /div> < !--/가입 양식--> < /div> < /div> < /div> < /섹션> < !--/form-->//` ***URLS.py*** ` django.contrib 가져오기 관리자에서 django.urls 가져오기 경로에서 .views에서 가져오기 * 에서 . 뷰 가져오기 URL 패턴= [ 경로('', 보기.색인, 이름='색인'), # 경로('등록', 조회수.등록, 이름='등록'), 경로('로그인',view.login_user, 이름='로그인'), ]

`

나는 당신이 여기에서 설명하려는 것을 이해하지 못합니다. 어떤 오류가 발생합니까? 더 나은 도움을 드릴 수 있도록 여기의 지침에 따라 질문 형식을 지정하세요.

Naeem Khan2022-01-15 19:09:15
  • 답변 # 1

    기본적으로 인증은 auth 사용자 모델의 사용자 이름 필드에 의해 수행되며, 인증 사용자 모델에서 username_field를 이메일 필드로 설정해야 합니다. 인증 사용자 모델은 다음과 같아야 합니다.

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

  • 답변 # 2

    잘못된 자격 증명을 보여줍니다.

    당신의인증()반환 없음

    인증()인증을 위해 기본적으로 사용자 이름과 비밀번호를 사용하고 인증을 위해 이메일과 비밀번호를 제공하고 있습니다. 이메일 및 비밀번호에서 인증하려면 사용자 정의 인증 백엔드를 작성하십시오.

    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']
    

    또한 이메일을 정리하십시오고유=참

  • 이전 flutter : openid 클라이언트로 keycloak 인증을 사용하여 플러터 웹 "502 Bad Gateway -Nginx"에 접속하기
  • 다음 두 필드에서 나누기에 해당하는 여러 행 가져오기