vue开发公众号 在钩子里面处理登录获取code
const baseurl = "//xxx"// 解析url参数并获取code
function getUrlParam(name) { //name为要获取的参数名
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var rrr = decodeURIComponent(window.location.search);
var r = rrr.substr(1).match(reg);
if(r != null) return unescape(r[2]);
return null;
}
// 请求微信服务器获取code 方法
function getUserCode() {
redirectURL = encodeURI((baseurl + window.location.pathname + window.location.search).split(\'&code\')[0]);//获取地址
const base = \'https://open.weixin.qq.com/connect/oauth2/authorize?appid=\';
let state;
let surl;
let reserveUrl;
let appid = "";
let scope = "1";
window.location.href =base + appid +\'&redirect_uri=\'+ redirectURL +\'&response_type=code&scope=\'+ scope + \'#wechat_redirect\';
}
// 路由变化时
router.beforeEach((to, from, next) => {
//读取sessionStorage的user
let user = JSON.parse(sessionStorage.getItem(\'user\'));
//这里可以在开发生产环境下 加测试用户信息存储到sessionStorage
if(document.domain == "127.0.0.1"){//本地环境
sessionStorage.setItem(\'user\', JSON.stringify({
uid : \'eyJhbGciOiJIUzI1NiJ9.eyJ0IjoiNjY1NDA6MTU1NzQ0ODE2MiJ9.Dt4QHKq58GOdI_j8GhK0o3SkyWwHDlfeHR0nh1nEgsw\',
identity: 1
}));
store.commit(\'updateUser\', {"uid":"eyJhbGciOiJIUzI1NiJ9.eyJ0IjoiNjY1NDA6MTU1NzQ0ODE2MiJ9.Dt4QHKq58GOdI_j8GhK0o3SkyWwHDlfeHR0nh1nEgsw","user_id":66540,"identity":1,"avatar":"http://chaofenxiang.vip/data/attachment/avatar/1904/28/ef0b7277767425348af3503e0759eacd.png","nickname":"小义","sex":"女","mobile":"15070026795"});//赋值本地存储
}
// 已登录
if (user) {
next();//释放路由 如果已经登录
}
// 未登录 且不是在测试环境下
if (!user && document.domain != "127.0.0.1") {
const code = getUrlParam(\'code\');//获取url 上面的code
// 还未完成微信授权
if (!code) {//假如没code
getUserCode();//请求微信服务器获取code
}
// 已完成微信授权 假如已经获取到了code
if (code) {
//使用code 去登录
axios.get("/xxxx", {//
params: {
code: code,
}
}).then(res => {
if (res.status == 200) {
let userInfo = res.data.userInfo;
sessionStorage.setItem(\'user\', JSON.stringify(userInfo));// 存sessionStorage
next();} else {
}
}).catch(err => {
//登录失败,请刷新重试
});
}
}else{
next();
}
});
//ps 代码放在main.js 里面仅供参考
以上是 vue开发公众号 在钩子里面处理登录获取code 的全部内容, 来源链接: utcz.com/z/376227.html