Django, успешный вход, но все еще анонимный пользователь

Оставаясь анонимным пользователем даже после успешного входа, вот 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)

serializers.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, я отправил запрос cookie в качестве заголовка, чтобы обеспечить процесс аутентификации, однако django воспринимает меня как анонимного пользователя, хотя на вкладке network все работает нормально.

Я ничего не знаю о логике react, но в Vue вы можете размещать состояние в store/index.js Так, вы можете хранить состояние аутентификации там как булево значение False, когда пользователь входит в систему и сервер отвечает кодом 200, оно превращается в True.

Вернуться на верх