feat: 添加JWKS token支持,更新用户和OAuth相关逻辑

This commit is contained in:
2026-02-21 06:29:11 +08:00
parent 672208ab6b
commit 71c238f953
6 changed files with 120 additions and 33 deletions

View File

@@ -9,7 +9,7 @@ import z from 'zod';
* @param ctx
* @returns
*/
export const createCookie = (token: { accessToken?: string; token?: string }, ctx: any) => {
export const createCookie = (token: { accessToken?: string; token?: string, type?: string; }, ctx: any) => {
if (!domain) {
return;
}
@@ -17,6 +17,11 @@ export const createCookie = (token: { accessToken?: string; token?: string }, ct
logger.debug('登陆用户没有请求对象不需要创建cookie');
return
}
// if (!token.type || token.type === 'jwks') {
// // 如果是jwks类型的token不创建cookie
// // 因为jwks类型的token自己就能检测是否过期了不需要依赖cookie了
// return;
// }
//TODO, 获取访问的 hostname 如果访问的和 domain 的不一致也创建cookie
const browser = ctx?.req?.headers['user-agent'];
const isBrowser = browser.includes('Mozilla'); // 浏览器
@@ -139,7 +144,7 @@ app
}
if (tokenUser.id === user.id) {
// 自己刷新自己的token
const token = await User.oauth.resetToken(oldToken, {
const token = await User.resetToken(oldToken, {
...tokenUser.oauthExpand,
});
createCookie(token, ctx);
@@ -156,9 +161,7 @@ app
browser: someInfo['user-agent'],
host: someInfo.host,
});
createCookie({
token: token.accessToken
}, ctx);
createCookie(token, ctx);
ctx.body = token;
})
.addTo(app);
@@ -263,10 +266,8 @@ app
const accessUser = await User.verifyToken(accessToken);
const refreshToken = accessUser.oauthExpand?.refreshToken;
if (refreshToken) {
const result = await User.oauth.refreshToken(refreshToken);
createCookie({
token: result.accessToken
}, ctx);
const result = await User.refreshToken(refreshToken);
createCookie(token, ctx);
ctx.body = result;
return;
@@ -276,9 +277,7 @@ app
...accessUser.oauthExpand,
hasRefreshToken: true,
});
createCookie({
token: result.accessToken
}, ctx);
createCookie(result, ctx);
ctx.body = result;
return;
}
@@ -332,18 +331,13 @@ app
const orgsList = [tokenUser.username, user.username, , ...orgs];
if (orgsList.includes(username)) {
if (tokenUsername === username) {
const result = await User.oauth.resetToken(token);
createCookie({
token: result.accessToken,
}, ctx);
await User.oauth.delToken(token);
const result = await User.resetToken(token);
createCookie(result, ctx);
ctx.body = result;
} else {
const user = await User.findOne({ username });
const result = await user.createToken(userId, 'default');
createCookie({
token: result.accessToken,
}, ctx);
createCookie(result, ctx);
ctx.body = result;
}
} else {
@@ -371,12 +365,10 @@ app
if (!refreshToken) {
ctx.throw(400, 'Refresh Token is required');
}
const result = await User.oauth.refreshToken(refreshToken);
const result = await User.refreshToken(refreshToken);
if (result) {
console.log('refreshToken result', result);
createCookie({
token: result.accessToken,
}, ctx);
createCookie(result, ctx);
ctx.body = result;
} else {
ctx.throw(500, 'Refresh Token Failed, please login again');

View File

@@ -119,9 +119,7 @@ app
const token = JSON.parse(data);
if (token.accessToken) {
ctx.body = token;
createCookie({
token: token.accessToken,
}, ctx);
createCookie(token, ctx);
} else {
ctx.throw(500, 'Checked error Failed, login failed, please login again');
}