Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Vue.js中检查登录状态_Javascript_Python_Vue.js_Authentication_Flask - Fatal编程技术网

Javascript 如何在Vue.js中检查登录状态

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

我有一个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 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错误,我知道我没有登录,并重定向到登录页面。所以是的,基本上你在做的就是我会怎么做。