详解vue微信网页授权最终解决方案(2)

登录成功后存用户信息,token。访问所有的接口的时候都会在header携带token,如果token失效了,服务端会返回401,做退出操作,删除登录状态,用户信息,token,刷新页面重新进入。

request.js

// 登录超时,重新登录 if (res.status === 401) { store.dispatch('user/fedLogOut').then(() => { location.reload() }) }

用户登录后将token和用户信息存入storage中,登录状态设置到cookie里,store user中主要是进行用户信息存贮获取删除的操作

store/modules/user.js

import { loginByCode } from '@/api/user' import { saveToken, saveLoginStatus, saveUserInfo, removeToken, removeUserInfo, removeLoginStatus, loadLoginStatus, loadToken, loadUserInfo } from '@/utils/cache' const state = { loginStatus: loadLoginStatus(), // 登录状态 token: loadToken(), // token userInfo: loadUserInfo() // 用户登录信息 } const mutations = { SET_USERINFO: (state, userInfo) => { state.userInfo = userInfo }, SET_LOGIN_STATUS: (state, loginStatus) => { state.loginStatus = loginStatus }, SET_TOKEN: (state, token) => { state.token = token } } const actions = { // 登录相关,通过code获取token和用户信息 loginWechatAuth({ commit }, code) { const data = { code: code } return new Promise((resolve, reject) => { loginByCode(data) .then(res => { // 存用户信息,token commit('SET_USERINFO', saveUserInfo(res.data.user)) commit('SET_TOKEN', saveToken(res.data.token)) resolve(res) }) .catch(error => { reject(error) }) }) }, // 设置状态 setLoginStatus({ commit }, query) { if (query === 0 || query === 1) { // 上线打开注释,本地调试注释掉,保持信息最新 removeToken() removeUserInfo() } // 设置不同的登录状态 commit('SET_LOGIN_STATUS', saveLoginStatus(query)) }, // 登出 fedLogOut() { // 删除token,用户信息,登陆状态 removeToken() removeUserInfo() removeLoginStatus() } } export default { namespaced: true, state, mutations, actions }

在根目录下.env开头的三个文件中设置微信appID

VUE_APP_WECHAT_APPID='12345678'复制代码

授权再也难不住我了,如果哪里有问题希望大家给我留言纠正,互相学习

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/362848a8a46bc00b831c55e0e64dba32.html