[英]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.