class Login {
private isLoginFail = false;
private userInfo!: ILoginUserInfo;
public getUserInfo(): ILoginUserInfo {
return this.userInfo;
}
public login(skipOwnLogin: boolean) {
return this.loginPromise(skipOwnLogin).then((v) => {
if (skipOwnLogin) {
return v;
}
const userInfo = (v as any);
if (userInfo.isEmployee) {
userInfo.name = "";
userInfo.phone = "";
}
this.userInfo = userInfo;
console.log("login success");
console.log(userInfo);
return userInfo;
}).catch((e) => {
console.error("login faile[save user info]", e);
this.isLoginFail = true;
Promise.reject(e);
});
}
private async loginPromise(skipOwnLogin: boolean):
Promise<WeApp.UserInfo | ILoginUserInfo> {
try {
const wxLoginCodeRes = await new Promise<WeApp.LoginResult>((resolve, reject) => {
wx.login({ success: resolve });
});
if (!wxLoginCodeRes.code) { throw new Error(`wx.login error:${wxLoginCodeRes.errMsg}`); }
const wxInfoRes = await new Promise<WeApp.UserInfo>((resolve, reject) => {
wx.getUserInfo({
success: resolve,
withCredentials: true,
});
});
if (skipOwnLogin) { return wxInfoRes; }
const ownInfoRes = await (requestPromise({
data: { code: wxLoginCodeRes.code, encryptedData: wxInfoRes.encryptedData, iv: wxInfoRes.iv },
method: "POST",
url: getRequestUrl("/wx/xcx"),
}) as Promise<{ data: ILoginResponse; statusCode: number; headers: {} }>);
if (ownInfoRes.statusCode !== 200) {
throw new Error(`ownServer.login error:http request status code is ${ownInfoRes.statusCode}`); }
if (ownInfoRes.data.errCode) { throw new Error(`ownServer.login error:${ownInfoRes.data}`); }
const a = { ...wxInfoRes.userInfo, ...ownInfoRes.data };
return a;
} catch (e) {
console.error(e);
Promise.reject(e);
}
throw new Error("Programe Logic miss.");
}
}
|