[英]Angular 2 frontend django 2 REST framework backend user auth
[英]Login works in Django Rest Framework but not on frontend
我有以下看法:
登錄視圖:
@api_view(['POST'])
def login_view(request):
try:
user_data = request.data
username = user_data["username"]
password = user_data["password"]
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
serializer = UserSerializer(user)
return Response(
{
"user":serializer.data,
"login": True
})
else:
return Response(serializers.errors, status=status.HTTP_400_BAD_REQUEST)
except:
raise Http404
注銷視圖:
@api_view(['POST'])
def logout_view(request):
if request.user.is_authenticated:
logout(request)
return Response(status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_403_FORBIDDEN)
並在前端獲取 function :
const onSubmit = () => {
fetch('http://127.0.0.1:8000/api/login/',{
method:"POST",
headers: {
'Accept': 'application/json, text/plain',
'Content-Type': 'application/json; charset=UTF-8'
},
body: JSON.stringify({
"username": values.Username,
"password": values.Password
})
}).then((response) => {response.json().then(data => {
if(response.ok){
setError('');
console.log(data);
}
else{
setError('');
setError('Invalid Username or Password');
}
})});
};
以及以下問題:
當我嘗試在前端登錄時,我得到了預期的響應:
{
user: {id: 4, username: 'Tester_1', date_joined: '2021-12-02T22:38:29.323393Z', trust_index: 0}
login: true
}
但我的用戶未登錄 Rest 框架,我無法在前端使用注銷視圖:在前端登錄后
當我使用 Rest 框架面板進行登錄時,一切正常,用戶已登錄,我可以使用注銷視圖:在 Rest 框架中登錄后
我已經為此苦苦掙扎了一段時間。 任何想法如何解決這個問題?
我不知道您的全局代碼,但您似乎正在嘗試創建基於 session 的登錄/身份驗證系統,將自動生成的 drf web 面板方法帶到您的面前。 在這種分離的結構(正面和背面)中,這不是最好的方法,至少您構建了一個奇怪的結構,其中 Django 封裝了您的正面和管理會話等。
一種可能更好的方法是使用 jwt 令牌生成/身份驗證。 您使用用戶和密碼進行身份驗證(從前面),但您(從后面)接收到必須在本地存儲的令牌(本地存儲,以模擬會話)。
在每個請求中,您傳遞 header 中的令牌,如果一切正常(有效令牌)drf 做這些事情。
我使用簡單的 JWT ( https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ )。 真的很簡單。
在前面,Axios 是一個很好的 js 庫,可以使用攔截器自動傳遞數據獲取令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.