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 里面仅供参考
相关文章
相关标签/搜索