2023-08-23 13:59:16 +08:00

57 lines
1.8 KiB
TypeScript

import {RouteHandleFunction} from "../core/types";
import {login} from "../service/app";
import {UserModel} from "../../model";
import {getFromRedis, setToRedis} from "../service/redis";
export function encodeUserToken(user: UserModel) {
if (user == null) throw new Error('user is null')
// const token = JSON.stringify(user)
const token = btoa(user.id + ':' + Date.now())
setToRedis('app-report:user:' + token, JSON.stringify(user)).then(() => console.log('setToRedis success'));
return token;
}
export function decodeUserToken(token: string) {
// 将token转回UserModel对象数据
// const user = decodeURIComponent(atob(token));
console.log('decodeUserToken token==>app-report:user:', token)
return getFromRedis<UserModel>('app-report:user:' + token)
// return JSON.parse(user) as UserModel
}
export const loginHandler: RouteHandleFunction
= async ({
body, res
}) => {
if (!body.username || !body.password) {
// 没有用户名或者密码
res.send({code: 2, message: '用户名和密码不能为空'})
return;
}
const userinfo = await login(body.username, body.password);
if (!userinfo) {
res.send({code: 1, message: '用户名或密码错误'})
return;
}
res.send({
code: 0, data: {
...userinfo,
token: encodeUserToken(userinfo)
}
})
}
export const getUserInfo: RouteHandleFunction =
async ({headers,user, res}) => {
const token = headers.authorization
if (!token) {
res.send({code: 403, message: '请先登录'})
return;
}
if (!user) {
res.send({code: 403, message: '请先登录'})
}
res.send({code: 0, message: 'success', data: user})
}