Javascript 如何在Vue.js中检查登录状态
我有一个python flask应用程序作为后端API,Vue.js SPA是前端 当我单击前端的登录按钮时,它将发布到我的flask登录api。 我还将JWT令牌附加到响应cookie上Javascript 如何在Vue.js中检查登录状态,javascript,python,vue.js,authentication,flask,Javascript,Python,Vue.js,Authentication,Flask,我有一个python flask应用程序作为后端API,Vue.js SPA是前端 当我单击前端的登录按钮时,它将发布到我的flask登录api。 我还将JWT令牌附加到响应cookie上 从烧瓶导入烧瓶,请求,jsonify,做出响应 从LASKU cors进口cors 从flask_jwt_扩展导入( JWTManager,需要jwt,创建访问令牌, 获取jwt声明,获取jwt身份,设置访问cookies ) @app.route('/login',methods=['POST']) def
从烧瓶导入烧瓶,请求,jsonify,做出响应
从LASKU cors进口cors
从flask_jwt_扩展导入(
JWTManager,需要jwt,创建访问令牌,
获取jwt声明,获取jwt身份,设置访问cookies
)
@app.route('/login',methods=['POST'])
def login():
username=request.json.get('username')
password=request.json.get('password')
如果不是(用户名=='toby5500'和密码=='123456'):
返回jsonify({“msg”:“404错误”})
其他:
res=jsonify({“auth”:“ok!”})
#创建JWT令牌
访问令牌=创建访问令牌(标识=用户名)
#在响应cookie上附加
设置_访问_cookies(res,访问_令牌)#具有httponly标志!
返回res
登录后浏览器的cookie:
所以我的问题是,当我想转到其他页面时,我应该如何检查该用户是否已经登录。
现在我的想法是在路由之前调用后端api来检查这个浏览器是否有正确的JWT令牌
如果flask api返回错误消息(没有JWT令牌),则重定向到登录页面
像这样
router.beforeach(异步(到、从、下一个)=>{
//此api将检查jwt令牌
获取('/check_jwt')。然后((res)=>{
if(res.data.error){
下一步({path:'/login'})
}
否则{
next()//验证是否正确
}
})
})
检查登录是否正确?无需在每次发出请求时重新检查令牌,只需检查令牌的过期日期,并优雅地处理401错误和令牌刷新逻辑。例如,在每个钩子之前,从Cookie或vuex中提取令牌之后:
let isExpired = true
if (token) {
isExpired = Date.now() > jwtDecode<{ exp: number }>(token).exp * 1000
}
// If no token or expired
if (!token || isExpired) {
// ..
}
让isExpired=true
如果(令牌){
isExpired=Date.now()>jwtDecode(令牌).exp*1000
}
//如果没有令牌或已过期
如果(!token | isExpired){
// ..
}
这里的另一个选项是反应式。不要在发出请求之前检查令牌是否有效,只需像普通请求一样发出请求即可。如果您收到一条错误消息,表明JWT已过期(或因其他原因无效,如后端的密钥更改),请让您的前端重定向回登录页面。您是否在request.cookies中检查了您的用户cookies?有关flask cookie的更多信息是的,这是my cookie(),但我不知道在前端使用此cookie进行身份验证的正确方法。通常对于我的API,我有一个/me
端点,它返回登录用户的用户信息。如果它返回401错误,我知道我没有登录,并重定向到登录页面。所以是的,基本上你在做的就是我会怎么做。