项目是前后分离,后端只给前端接口,每一个接口带token,现在有一些需要登录才能进去的页面,前端如何拦截
。比如:由A页面
通过A标签跳转到 B页面
(B页面需要登录才能进去)。我现在做法是进到B页面,发送ajax请求
,后台返回状态才做跳转到登录页面,现在问题是我已经进到B页面才做判断很不合理。
为情所困2017-06-24 09:46:13
前端不做拦截,服务器端做拦截。前端拦截的话,只能在B页面做,你考虑一下拼写url进入呢?B页面访问接口尝试拿userinfo,拿到就是登陆了,没拿到就没登录。
ringa_lee2017-06-24 09:46:13
token一般都有过期时间,用localstorage保存token的时候带上一个过期时间,页面跳转的时候先判断token
是否过期,过期了就跳登录页,没有就继续。
如果是单页的应用这个就很好解决,如果不是单页的话,就写到一个公共js里。
阿神2017-06-24 09:46:13
肯定会由用户某个交互动作 导致 跳转到第二个页面的, 再跳转之前 进行登录验证, 没有登录就让其登录(或者注册), 登录(注册)肯定要 封装起来的, 封装的时候 预留 登录后的 成功回调和 注册成功 后的回调, 在回调函数中再做跳转 到B页面
迷茫2017-06-24 09:46:13
这种两种方法解决:
1、服务端做验证 既然是要登录才能进去的页面 必然会涉及到用户权限 在B页面发的ajax请求中有token 后端做token过期的验证 判断是否有权限 报错统一返回 前端写一个公共方法验证没有权限的错误信息 (这种方式要做到响应的接口上 比较保险)
2、前端在每个页面写个看门狗js,判断存储用户信息中的过期时间 在做跳转。
我看楼主的需求是想在点击的时候做判断是否跳转 可以把a标签换成点击函数 在函数中判断 使用window.location.href = url 的方式跳转页面
三叔2017-06-24 09:46:13
lz前端框架用的什么?
我知道vue_router中有钩子函数可以实现, 在router.beforeEach的时候判断是否登录,如果没有登录就去登录,如果登录就直接next()