具体流程:
进入 h5 ➡️ 静默登录 ➡️ 请求登录接口 ➡️ 必要时候调起登录组件 ➡️ 点击按钮进行非静默登录 ➡️ 再次请求登录接口 ➡️ 获取到所有用户数据
一、封装登录 function
authLogin: (callback) => {
const that = this;
// 判断是否是在微信环境下运行
if (utils.isWechat()) {
const token = window.localStorage.getItem('__token');
const unionid = window.localStorage.getItem('__unionid');
const loginType = window.localStorage.getItem('__loginType');
// 有token证明登录过,可直接进行回调
if (token) {
callback();
return;
}
if (!unionid) {
// 判断登录方式为静默或非静默, snsapi_base 静默,snsapi_userinfo 非静默
const snsapi = loginType == "snsapi_userinfo" ? "snsapi_userinfo" : "snsapi_base";
// 获取 code 方法,附文章最下边
let _code = utils.getUrlParam("code");
if (_code == null || _code === "") {
// 进行微信授权,附文章最下边
// 传当前页面的URL(微信授权完之后返回到的页面)和 登录方式
utils.getWXCode(window.location.href, snsapi);
} else {
uni.request({
url: '登录请求接口',
method: "GET",
data: {
code: _code,
snsapi: snsapi
},
success: (res) => {
// 静默登录获取到的 unionid 为假数据,我这里后端接口设置静默登录时候返回为 "" ,方便后面判断是否需要非静默登录
window.localStorage.setItem('__unionid', res.data.data.unionid);
window.localStorage.setItem('__token', res.data.data.token);
window.localStorage.setItem('__openid', res.data.data.openid);
window.localStorage.removeItem('__loginType');
// 登录成功后的回调,我这里的每个接口请求都需要在有token的前提下进行
callback();
},
fail: (err) => {