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.