介绍
怎么在vue中使用鸡蛋和智威汤逊实现一个登录验证功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
vue前端主要。js中:
import axios 得到& # 39;axios& # 39;; import cookie 得到& # 39;公共/util/# 39;; router.beforeEach(下),,,,,=祝辞,{ ,console.log(& # 39;路由拦截& # 39;) ,//判断要去的路由有没有requiresAuth ,if (to.meta.requiresAuth), { let 才能;token =, cookie.getCookie(& # 39;标记# 39;); if 才能;(令牌),{ ,,next (); ,,},{else 下({,, ,,,路径:,& # 39;/登录# 39; ,,}); ,,} ,}else { ,,下一个();//如果无需令牌,那么随它去吧 ,} })//,http request 拦截器 axios.interceptors.request.use (=,config 祝辞,{ let 才能;token =, cookie.getCookie(& # 39;标记# 39;); console.log才能(令牌) if 才能;(令牌),{,//判断是否存在令牌,如果存在的话,则每个http 头都加上令牌 ,,config.headers.authorization =, token ${牌}'; ,,} return 才能;配置; },=,err 祝辞,{ return 才能Promise.reject(错); ,}); ,//,http response 拦截器 axios.interceptors.response.use (=,response 祝辞,{ return 才能;响应; },=,error 祝辞,{ if 才能;(error.response), { ,,switch (error.response.status), { ,,,case 401: ,,,,//,返回,401年,清除牌信息并跳转到登录页面 ,,,,router.replace ({ ,,,,,路径:,& # 39;/登录# 39; ,,,,}); ,,} ,,} return 才能Promise.reject (error.response.data);,,//,返回接口返回的错误信息 ,}); Vue.prototype http 美元;=,axios;
其中跑龙套。js中我封装了操作饼的方法
//获取饼干, function getCookie(名字),{ var 才能,加勒比海盗,reg =, new 正则表达式(“(^ |,)“,+,name +,“=((^;) *) (; | $)“); if 才能;(arr =, document.cookie.match (reg)) ,,return (arr [2]); 其他的才能 ,,return 零; ,,} ,,//才能设置cookie,增加到vue实例方便全局调用 function setCookie (c_name、,价值,expiredays), { var 才能;exdate =, new 日期(); exdate.setDate才能(exdate.getDate (), +, expiredays); document.cookie 才能=,c_name +,“=? +,逃避(值),+,((==expiredays null), ?,,,,,,,,=暗狡?+,exdate.toGMTString ()); ,,}; ,,//才能删除饼干 function delCookie (名字),{ var 才能;exp =, new 日期(); exp.setTime才能(exp.getTime(),安康;1); var 才能;cval =, getCookie(名称); if 才能;(cval !=, null) ,,document.cookie =, name +,“=? +, cval +,“;=暗狡?+,exp.toGMTString (); ,,}; module.exports 才能=,{ getCookie才能:getCookie, setCookie才能:setCookie, delCookie: delCookie才能 以前,,}>路由中需要登录才能访问的页面,应:
路径:& # 39;/admin/经理# 39;,组件:页面,名字:& # 39;管理系统首页& # 39;,元:{requiresAuth:真}如果需要获取令牌中的信息则:
let token =, cookie.getCookie(& # 39;标记# 39;); let Base64 =,要求(& # 39;js-base64& # 39;) .Base64; let str =, token.split(& # 39;强生# 39;)[1]; let user =, JSON.parse (Base64.decode (str)); console.log(用户)后端在登录逻辑执行完后,需要给前端发放标记
, let jwt =,要求(& # 39;jsonwebtoken& # 39;); ,,,let token =, jwt.sign ({ ,,,,,user_id: 1, ,,,,,user_name:, & # 39;张三& # 39; ,,,,},,& # 39;自定义签名盐值& # 39;,,{ ,,,,,expiresIn:, & # 39; 60 & # 39;,//时间根据自己定,具体可参考jsonwebtoken插件官方说明 ,,,,}); this.ctx.cookies.set(& # 39;令牌,,,,,{maxAge: 60 * 1000, httpOnly:假的,覆盖:真的,签署:假}) 时间=this.ctx.body 真实;接着是中间件:
module.exports =,(),=祝辞,{ ,const jwt =,要求(& # 39;jsonwebtoken& # 39;); ,return async  function (ctx,,下一个),{ if 才能;(ctx.request.header[& # 39;授权# 39;]),{ ,,let token =, ctx.request.header[& # 39;授权# 39;].split (& # 39;, & # 39;) [1]; null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在vue中使用鸡蛋和智威汤逊实现一个登录验证功能