57 lines
1.8 KiB
TypeScript
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})
|
|
}
|