toke验证

需要准备的东西:Vue+axios+Vuex+Vue-router

1.在login.vue中通过发送http请求获取token


     
     
  1. //根据api接口获取token
  2. var url = this.HOST + "/session";
  3. this.$axios.post(url, {
  4. username: this.loginForm.username,
  5. password: this.loginForm.pass
  6. }).then( res => {
  7. // console.log(res.data);
  8. this.$message.success( '登录成功');
  9. let data = res.data;
  10. //根据store中set_token方法将token保存至localStorage/sessionStorage中,data["Authentication-Token"],获取token的value值
  11. this.$store.commit( 'set_token', data[ "Authentication-Token"]);
  12. if (store.state.token) {
  13. this.$router.push( '/')
  14. console.log(store.state.token)
  15. } else {
  16. this.$router.replace( '/login');
  17. }
  18. }).catch( error => {
  19. // this.$message.error(error.status)
  20. this.loading = false
  21. this.loginBtn = "登录"
  22. this.$message.error( '账号或密码错误');
  23. // console.log(error)
  24. })



2.在store.js中对token状态进行监管


     
     
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. export default new Vuex.Store({
  5. state:{
  6. token: ''
  7. },
  8. mutations:{
  9. set_token(state, token) {
  10. state.token = token
  11. sessionStorage.token = token
  12. },
  13. del_token(state) {
  14. state.token = ''
  15. sessionStorage.removeItem( 'token')
  16. }
  17. }
  18. })

3.在router/index.js中

    
    
  1. // 页面刷新时,重新赋值token
  2. if (sessionStorage.getItem( 'token')) {
  3. store.commit( 'set_token', sessionStorage.getItem( 'token'))
  4. }
  5. const router = new Router({
  6. mode: "history",
  7. routes
  8. });
  9. router.beforeEach( (to, from, next) => {
  10. if (to.matched.some( r => r.meta.requireAuth)) { //这里的requireAuth为路由中定义的 meta:{requireAuth:true},意思为:该路由添加该字段,表示进入该路由需要登陆的
  11. if (store.state.token) {
  12. next();
  13. }
  14. else {
  15. next({
  16. path: '/login',
  17. query: { redirect: to.fullPath}
  18. })
  19. }
  20. }
  21. else {
  22. next();
  23. }
  24. })






4.在main.js中定义全局默认配置:

Axios.defaults.headers.common['Authentication-Token'] = store.state.token;
    
    

5.在src/main.js添加拦截器


     
     
  1. // 添加请求拦截器
  2. Axios.interceptors.request.use( config => {
  3. // 在发送请求之前做些什么
  4. //判断是否存在token,如果存在将每个页面header都添加token
  5. if(store.state.token){
  6. config.headers.common[ 'Authentication-Token']=store.state.token
  7. }
  8. return config;
  9. }, error => {
  10. // 对请求错误做些什么
  11. return Promise.reject(error);
  12. });
  13. // http response 拦截器
  14. Axios.interceptors.response.use(
  15. response => {
  16. return response;
  17. },
  18. error => {
  19. if (error.response) {
  20. switch (error.response.status) {
  21. case 401:
  22. this.$store.commit( 'del_token');
  23. router.replace({
  24. path: '/login',
  25. query: { redirect: router.currentRoute.fullPath} //登录成功后跳入浏览的当前页面
  26. })
  27. }
  28. }
  29. return Promise.reject(error.response.data)
  30. });

------------------------------------------------------------------------------------
...................完成以上步骤就可以了..........................
------------------------------------------------------------------------------------

转载来源:https://blog.csdn.net/qq_34825875/article/details/79569579
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值