fix: add web-login

This commit is contained in:
2025-02-25 20:06:41 +08:00
parent c6de4f7dc3
commit 69721f3944
6 changed files with 224 additions and 14 deletions

View File

@@ -0,0 +1,83 @@
import { app } from '@/app.ts';
import { User } from '@/models/user.ts';
import { log } from 'console';
import MD5 from 'crypto-js/md5.js';
import jsonwebtoken from 'jsonwebtoken';
const tokenData: Record<string, string> = {};
app
.route({
path: 'user',
key: 'webLogin',
middleware: ['auth'],
})
.define(async (ctx) => {
const tokenUser = ctx.state.tokenUser;
const { loginToken, sign, randomId } = ctx.query || {};
if (!loginToken) {
ctx.throw(400, 'loginToken is required');
}
if (!sign) {
ctx.throw(400, 'sign is required');
}
if (!randomId) {
ctx.throw(400, 'randomId is required');
}
const tokenSecret = 'xiao' + randomId;
let payload: any = {};
try {
payload = jsonwebtoken.verify(loginToken, tokenSecret);
} catch (e) {
ctx.throw(400, 'loginToken error');
}
const { timestamp } = payload;
const checkSign = MD5(`${tokenSecret}${timestamp}`).toString();
if (sign !== checkSign) {
ctx.throw(400, 'sign error');
}
const user = await User.findByPk(tokenUser.id);
console.log('tokenUser', tokenUser)
if (!user) {
ctx.throw(400, 'user not found');
}
const token = await user.createToken(null, 'plugin');
const data = jsonwebtoken.sign(
{
userToken: token,
user: {
username: user.username,
id: user.id,
},
},
tokenSecret,
{
expiresIn: '1h',
},
);
// ctx.body = data;
tokenData[loginToken] = data;
})
.addTo(app);
app
.route({
path: 'user',
key: 'checkLoginStatus',
})
.define(async (ctx) => {
const { loginToken } = ctx.query;
if (!loginToken) {
ctx.throw(400, 'loginToken is required');
}
const data = tokenData[loginToken];
if (data) {
ctx.body = data;
} else {
ctx.throw(400, 'Checked Failed');
}
})
.addTo(app);