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