import BaseAuth from './BaseAuth';
import {wxPromise, wxResolve} from '../../wxPromise';
/**
* 微信登录鉴权模块
* 使用微信登录时,负责根据微信提供的信息,完成校验过程,并返回对应的登录数据
* @extends BaseAuth
*/
class WechatAuth extends BaseAuth{
async silentLogin({loginOptions, configOptions}){
let wxLoginRes = await this.wxLogin();
return this.loginByWxSilent({wxLoginRes, loginOptions, configOptions});
}
async beforeAuthLogin({loginOptions, configOptions}){
let wxLoginRes = await this.wxLogin();
return {wxLoginRes};
}
async authLogin({loginOptions, configOptions, beforeRes, authData}){
return this.loginByWxAuth({
wxLoginRes: beforeRes.wxLoginRes,
authData,
loginOptions,
configOptions,
});
}
/**
* 微信登录:调用微信相关API,获取微信登录态
* @return {WechatAuth~WxLoginRes} wx.login执行结果
*/
async wxLogin(){
return await wxResolve.login();
}
/**
* 微信静默登录
* 根据wxLoginRes.code调后端接口解密获得用户openid,根据openid查询用户表
* 若为老用户,则能成功从数据库中找到匹配项,从而悄悄完成登录过程
* 若为新用户,则静默登录失败
* @param {WechatAuth~WxLoginRes} wxLoginRes wx.login执行结果
* @param loginOptions 登录函数调用参数,参见{@link BaseLogin#login}
* @param configOptions 登录模块配置参数,参见{@link BaseLogin#config}
* @return {BaseAuth~LoginRes}
*/
async loginByWxSilent({wxLoginRes, loginOptions, configOptions}){
//根据wxLoginRes.code调后端接口获得用户信息
return {
succeeded: false,
errMsg: '请覆盖loginByWxSilent函数完成查询用户信息功能',
toastMsg: '请覆盖loginByWxSilent函数完成查询用户信息功能',
userInfo: {},
expireTime: -1,
anonymousInfo: null,
}
}
/**
* 微信授权登录
* 根据用户同意授权后从微信处拿到的信息,完成登录过程
* @param {WechatAuth~WxLoginRes} wxLoginRes wx.login执行结果
* @param {Object} authData 登录界面交互结果,格式同wx.getUserInfo返回结果
* @param loginOptions 登录函数调用参数,参见{@link BaseLogin#login}
* @param configOptions 登录模块配置参数,参见{@link BaseLogin#config}
* @return {BaseAuth~LoginRes}
*/
async loginByWxAuth({wxLoginRes, authData, loginOptions, configOptions}){
//根据wxLoginRes.code和authData调后端接口获得用户信息
return {
succeeded: false,
errMsg: '请覆盖loginByWxAuth函数完成注册/查询用户信息功能',
toastMsg: '请覆盖loginByWxAuth函数完成查询用户信息功能',
userInfo: {},
expireTime: -1,
anonymousInfo: null,
}
}
}
/**
* @typedef {Object} WechatAuth~WxLoginRes wx.login执行结果
* @property {boolean} succeeded 是否成功
* @property {string} code wx.login接口返回的code
*/
export default WechatAuth;