router.js 进行路由拦截
router.beforeEach((to, from, next) => {
if (to.meta.requireAuth) {
const hasToken = getToken()
if (hasToken || sessionStorage.getItem('openUserId') !== null) {
next()
} else {
const redirect_uri = encodeURIComponent(
`http://pj.xxxxx.com.cn${process.env.VUE_APP_CONTEXT_PATH}wxlogin`
)
let routeData = {
name: to.name,
query: to.query
};
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${process.env.VUE_APP_APPID}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_privateinfo&state=${JSON.stringify(routeData)}#wechat_redirect`
}
} else {
next()
}
})
在utils下新建一个index.js页面,写一些公共方法
import Cookies from 'js-cookie'
const TokenKey = 'ZkPlatformToken'
export function getToken() {
return Cookies.get(TokenKey)
}
export function setToken(token) {
return Cookies.set(TokenKey, token)
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
const getUrlParam = name => {
const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
const r = window.location.search.substr(1).match(reg)
if (r != null) return decodeURIComponent(r[2])
return null
}
新建一个wxLogin.vue页面
import { getUrlParam } from "@/utils/index";
mounted() {
if (Object.keys(this.$route.query).length !== 0) {
this.code = this.$route.query.code || getUrlParam("state");
this.state = JSON.parse(this.$route.query.state) || getUrlParam("state");
this.getTokenLogin(this.code);
}
},
methods: {
getToken({ code: code, appId: "398635843584" }).then((res) => {
if (res.data.code === 0) {
this.$router.push({
path: this.state.name,
query: this.state.query,
});
} else {
Toast.fail(res.data.msg);
if (res.data.code === 500101) {
const redirect_uri = encodeURIComponent(
`http://pj.xxxxx.com.cn${process.env.VUE_APP_CONTEXT_PATH}wxlogin`
);
let routeData = {
name: this.state.name,
query: this.state.query,
};
window.location.href= `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${
process.env.VUE_APP_APPID
}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_privateinfo&state=${JSON.stringify(
routeData
)}#wechat_redirect`;
}
}
});
}
App.vue页面
async getUser() {
try {
let res = await getLoginUser();
var data = res.data.data;
if (res.data.code === 0) {
sessionStorage.setItem("openUserId", data.wxOpenUserId);
sessionStorage.setItem("corpId", data.wxCorpId);
sessionStorage.setItem("userName", data.userName);
sessionStorage.setItem("userAvatar", data.avatar);
} else {
Toast.fail(res.data.msg);
}
} catch (error) {
console.log(error);
}
}