mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { loginWithToken, UserLoginInfo } from 'tailchat-shared';
|
|
import _isNil from 'lodash/isNil';
|
|
import { getUserJWT } from './jwt-helper';
|
|
|
|
let _userLoginInfo: UserLoginInfo | null = null;
|
|
|
|
export function setGlobalUserLoginInfo(loginInfo: UserLoginInfo | null) {
|
|
_userLoginInfo = loginInfo;
|
|
}
|
|
|
|
/**
|
|
* 获取全局用户登录信息
|
|
* 信息来源可能为注册页面或者登录页面
|
|
*/
|
|
export function getGlobalUserLoginInfo() {
|
|
return _userLoginInfo;
|
|
}
|
|
|
|
/**
|
|
* 尝试自动登录
|
|
*/
|
|
export async function tryAutoLogin(): Promise<UserLoginInfo> {
|
|
let userLoginInfo = getGlobalUserLoginInfo();
|
|
if (_isNil(userLoginInfo)) {
|
|
// 如果没有全局缓存的数据, 则尝试自动登录
|
|
const token = await getUserJWT();
|
|
if (typeof token !== 'string') {
|
|
throw new Error('Token 格式不合法');
|
|
}
|
|
|
|
console.debug('正在尝试使用Token登录');
|
|
userLoginInfo = await loginWithToken(token);
|
|
if (userLoginInfo === null) {
|
|
throw new Error('Token 内容不合法');
|
|
}
|
|
|
|
setGlobalUserLoginInfo(userLoginInfo);
|
|
}
|
|
|
|
return userLoginInfo;
|
|
}
|