Django JWT Auth 和 Vue:如何检查用户是不是登录 Vue?
Posted
技术标签:
【中文标题】Django JWT Auth 和 Vue:如何检查用户是不是登录 Vue?【英文标题】:Django JWT Auth and Vue: How to check if user is logged in in Vue?Django JWT Auth 和 Vue:如何检查用户是否登录 Vue? 【发布时间】:2021-09-24 04:01:20 【问题描述】:我的后端在 Django,前端在 Vue。
用户在 Vue 中执行登录,并通过 POST 请求将凭据发送到 Django JWT 登录端点。此端点返回一个在 localStorage 中设置的令牌。
然后我想在 Vue 中检查用户是否已登录。为此,Django 中存在另一个端点。但是,它总是返回“AnonymUser”。我不知道如何设置此检查。
姜戈:
我的设置.py
JWT_AUTH =
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=1),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
我的 urls.py
path('check-auth', views.check_if_logged_in, name="check-auth"), # check auth
path('auth/obtain_token', obtain_jwt_token), # obtain token
path('auth/refresh_token', refresh_jwt_token),
我的意见.py
# Login Check
@csrf_exempt
def check_if_logged_in(request):
authentication_class = (JSONWebTokenAuthentication,)
permission_classes = (IsAuthenticated,)
print(request.user) # returns AnonymUser
check = None
if request.user.is_authenticated:
check = True
else:
check = False
print(check) # returns False
return HttpResponse(f"<html><body>check</body></html>")
Vue
获取令牌函数
obtainToken()
var that = this;
fetch(this.endpoints.obtainJWT,
method: 'POST',
headers:
'Accept': 'application/json',
'Content-Type': 'application/json'
,
body: JSON.stringify(
username: that.django.username,
password: that.django.password
)
).then(response => response.json()
).then(function(response)
console.log('auth', response); # get token
that.updateToken(response.token); # update localStorage
that.checkAuthData(); #check auth
);
,
checkAuth 函数
checkAuthData: function()
var that = this;
fetch('http://localhost:8000/check-auth',
method: 'POST',
headers:
'Accept': 'application/json',
'Content-Type': 'application/json'
,
body: JSON.stringify(
token: this.jwt # send token
)
).then(response => response.json()
).then(function(response)
console.log('check', response);
);
,
【问题讨论】:
【参考方案1】:您不应该在正文中包含标记,而是在标题中包含:
headers:
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.jwt
,
另外,请确保在您的 Django 设置中 REST_FRAMEWORK
DEFAULT_AUTHENTICATION_CLASSES
包含 JWT 身份验证:
REST_FRAMEWORK =
'DEFAULT_AUTHENTICATION_CLASSES': [
...
'rest_framework_simplejwt.authentication.JWTAuthentication',
]
【讨论】:
不幸的是它没有帮助,仍然得到 AnonymUser @AnnaDmitrieva,你安装了djangorestframework-simplejwt
吗?你确定你得到了obtainToken
中的令牌吗?以上是关于Django JWT Auth 和 Vue:如何检查用户是不是登录 Vue?的主要内容,如果未能解决你的问题,请参考以下文章
当他从所有浏览器(Django-rest-auth,JWT)更改密码时如何注销用户?
如何在 Laravel 和 Vue.js 中使用 jwt-auth 检查用户是不是经过身份验证
可以使用 Auth0 JWT 令牌向 Django 后端发送 POST 请求吗?