javascript - 登录拦截逻辑问题?
问题描述
现在我输入账号密码,浏览器发送请求,成功返回了token;
想问的是:这个token我是放在cookie里好还是localStorage好呢?
还有就是其他页面的登录拦截怎么处理?
是判断cookie或者localStorage里有token就放行吗?(如果是,别人随便造一个token也可以放行了啊)
还有成功的返回的超时时间是怎么用,是放在cookie里面吗?
还是我的思路是错的?
问题解答
回答1:用户认证成功后,服务端返回的 token 值,前端一般存在 localStorage 里。每次发出请求的时候,把该 token 放在请求头即可。下面以 axios为例:
// http request 拦截器api.interceptors.request.use(config => { if (window.localStorage.ACCESS_TOKEN) { config.headers.Authorization = ’Bearer ’ + window.localStorage.ACCESS_TOKEN } return config}, error => { return Promise.reject(error)})// http response 拦截器api.interceptors.response.use(response => { if (response.status === 401) { // token过期 window.localStorage.removeItem(’ACCESS_TOKEN’) router.replace({ path: ’/user/login’, query: {redirect: router.currentRoute.fullPath } }) } return response}, error => { return Promise.reject(error)})
页面的登录拦截以 vue.js 的 vue-router 为例:
// 导航钩子router.beforeEach((to, from, next) => { // 检查登录状态 store.commit(types.CHECKOUT_LOGIN_STATUS) if (to.matched.some(record => record.meta.requiresAuth)) { // 判断该路由是否需要登录权限 if (window.localStorage.ACCESS_TOKEN) { // 如果本地存在 access_token,则继续导航 next() } else { if (name === ’userLogin’) {next() } else {next({ // 登录成功后,自动跳转到之前的页面 path: ’/user/login’, query: { redirect: to.fullPath }}) } } } else { next() }})
另外 token 值一般是很难伪造的,因为每次请求都会向后端去验证该 token 值的有效性。
回答2:建议 通过 服务端返回的 request 中 使用 setCookie 的方式进行 token设置,并且设置为 httpOnly,后面的请求中带上cookie,然后根据 server 的回调判断状态。
相关文章:
1. html - 自学php 遇到代码不执行直接在网页上显示 望各位大神不吝赐教2. html - node-module文件有两个在我的项目文件里3. 这段代码是获取百度收录量的!需要怎么设置才能获取百度快照旁边的网址呢?4. 这是什么情况???5. android-studio - android studio如何设置默认打开欢迎页而不是最近的项目?6. 微信小程序的选项卡中的数据分页加载卡顿问题???7. linux - ngxin配置后,网页打不开8. Android Studio 中 xUtils 3.0 替换 2.0 的时候总报找不到 jar 包是什么原因?9. 数据表里没数据显示10. mysql如何配置远程php外网链接数据库
