press-next
Version:
Vue3 组件库,支持 Composition API
49 lines (42 loc) • 1.49 kB
text/typescript
import { loginMp } from '../../mp-login/mp-login';
import { LoginMpType } from '../../mp-login/types';
import { ErrorCode } from '../types';
import type { IInterceptor } from '../types';
/**
* 处理小程序登录
*/
export class MpLoginInterceptor implements IInterceptor {
// 要登录的小程序appid
public appId = '';
// 登录的平台类型
public loginMpType: LoginMpType = LoginMpType.LoginMpWeixin;
public options: {
getGlobalEBus: (() => any),
showLoadingWhenLoginInMp?: boolean;
isRedirectAfterLogin?: boolean;
notRefreshInMp?: boolean;
qqAppIdInWxMini?: string;
} = {
getGlobalEBus: () => {},
showLoadingWhenLoginInMp: false,
isRedirectAfterLogin: false,
notRefreshInMp: false,
qqAppIdInWxMini: '',
};
async interceptor(param: any, extra: any): Promise<[boolean, any]> {
if (param.data?.r === ErrorCode.NeedLogin) {
// 后台换code的cgi也是返回100000,要排除这种情况
if (extra.url.indexOf('&code=') === -1 && extra.url.indexOf('&extplat_extra=') === -1) {
await loginMp({
url: extra.url,
getGlobalEBus: this.options.getGlobalEBus,
showLoadingWhenLoginInMp: this.options.showLoadingWhenLoginInMp,
isRedirectAfterLogin: this.options.isRedirectAfterLogin,
notRefreshInMp: this.options.notRefreshInMp,
qqAppIdInWxMini: this.options.qqAppIdInWxMini,
});
}
}
return [false, param];
}
}