46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import {RouteHandleFunction} from "../core/types.ts";
|
|
import {login} from "../service/app.ts";
|
|
import {UserModel} from "../../model";
|
|
|
|
export function encodeUserToken(user: UserModel) {
|
|
if (user == null) throw new Error('user is null')
|
|
const token = JSON.stringify(user)
|
|
return btoa(encodeURIComponent(token));
|
|
}
|
|
|
|
export function decodeUserToken(token: string) {
|
|
// 将token转回UserModel对象数据
|
|
const user = decodeURIComponent(atob(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 =
|
|
({headers, res}) => {
|
|
const token = headers.Authorization
|
|
const user = decodeUserToken(token)
|
|
res.send({code: 0, message: '登录成功', data: user})
|
|
}
|