簡體   English   中英

Django,登錄成功,但還是匿名用戶

[英]Django, successful login, but still anonymous user

即使在成功登錄后仍然是匿名用戶,這里是views.py:

class LoginView(views.APIView):
    def post(self, request):
        data = serializers.LoginSerializer(data=request.data)
        print(data.is_valid())
        print(data.errors)
        print(f" HEEERE::: {data}")
        if self.request.method == 'POST':
            if data.is_valid():
                auth = authenticate(
                    username=data.validated_data['email'], password=data.validated_data['password'])
                print(f" email check : {data.validated_data['email']}")
                print(f"auth:: {auth}")
                if auth is not None:
                        login(request, auth)
                        print("Hello World")
                        return redirect("/somelink")

                else:
                    return HttpResponse("Invalid Credentials")
            else:
                return HttpResponse("Data not being validated :O")


class LogoutView(views.APIView):
    def post(self, request):
        logout(request)

序列化程序.py

class LoginSerializer(serializers.Serializer):
    email = serializers.EmailField()
    password = serializers.CharField(write_only=True)
    def validate(self, data):
        email = data.get("email")
        print(f" email here : {email}")
        password = data.get("password")
        user = authenticate(username=email, password=password)
        print(f"{user} username serializer ")
        print(f"this is data : {data}")
        if user is not None:
            return data
        raise serializers.ValidationError("Incorrect Credentials")

在前端(React):登錄組件:

import React, { useState } from 'react';
import { Link , Redirect} from 'react-router-dom';
import { connect } from 'react-redux';
import { login } from '../actions/auth';
import axios from 'axios';
import Cookies from 'js-cookie';


function Login(){
    let [login,setLogin,isLoggedin] = useState({
        email: '',
        password:''

    });
    let cookie = Cookies.get('csrftoken');
    const { email, password } = login;
    function handleChange(e){
        console.log(e.target.value);
        setLogin({
            ...login,
            [e.target.name]: e.target.value
        });

    }
    function handleSubmit(e){
        e.preventDefault();
        axios.post(' http://127.0.0.1:8000/login/',login,{withCredentials:true},{headers: {'Content-Type': 'application/json', 'X-CSRFToken': cookie,'Access-Control-Allow-Origin':'*'}})
        .then(res => {
            console.log(res.data);
            setLogin({
                ...login,
            })
        })
    }

    
    return (
        <div className="container">
        <form method='post' onSubmit={handleSubmit}>
            <h1>Login</h1>
            <label>
                Email:
                <input type='text' name = 'email' value={email} onChange={e=>handleChange(e)} required/>

            </label>
            <label>
                Password:
                <input type='password' name = 'password' value={password} onChange={e=>handleChange(e)} required/>
            </label>
            {isLoggedin = true}
            <button type='submit'>Login</button>
        </form>
            <p className='mt-3'>
                Don't have an Account? <Link to='/signup'>Sign Up</Link>
            </p>
        </div>
    );
};

我正在使用基於會話的身份驗證,默認情況下在 django 中實現,我發送了一個作為 header 的 cookie 請求以確保身份驗證過程,但我被 django 視為匿名用戶,盡管網絡選項卡中的一切正常。

我對反應邏輯一無所知,但是在 Vue 中,您可以將 state 發布到 store/index.js 中,因此,您可以將身份驗證 state 存儲為 Z84E2C64F38F78BA3EA5C92005A2DA27 ,當用戶設置為 False 登錄時它變成了真。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM