添加jwt验证,添加交叉评查首页加载对接接口,评查任务文档列表对接接口,意见列表对接接口
This commit is contained in:
+87
-3
@@ -3,7 +3,8 @@ import { useSearchParams, Form } from "@remix-run/react";
|
||||
import { type MetaFunction, type LoaderFunctionArgs, type ActionFunctionArgs, redirect } from "@remix-run/node";
|
||||
import { OAuthClient } from "~/api/login/oauth-client";
|
||||
import { OAUTH_CONFIG } from "~/config/api-config";
|
||||
import { getUserSession, getSession, createUserSessionWithInfo, getUserBySub, addDefaultRole } from "~/api/login/auth.server";
|
||||
import { getUserSession, getSession, sessionStorage, getUserBySub, addDefaultRole } from "~/api/login/auth.server";
|
||||
import { JWTUtils, type UserInfoForJWT } from "~/utils/jwt";
|
||||
import styles from "~/styles/pages/login.css?url";
|
||||
|
||||
export const links = () => [
|
||||
@@ -61,8 +62,91 @@ export async function action({ request }: ActionFunctionArgs) {
|
||||
await addDefaultRole(user.id, 2); // 添加common角色
|
||||
}
|
||||
|
||||
// 创建用户会话,默认角色为common,并保存用户信息
|
||||
return createUserSessionWithInfo(true, 'common', redirectTo, user);
|
||||
// 设置模拟的OAuth token信息
|
||||
const mockTokenExpiresIn = 60 * 60 * 2; // 2小时,与真实OAuth token保持一致
|
||||
const userRole = 'common';
|
||||
|
||||
// 生成前端专用JWT
|
||||
const jwtUserInfo: UserInfoForJWT = {
|
||||
sub: user.sub,
|
||||
user_id: user.id!,
|
||||
username: user.username,
|
||||
nick_name: user.nick_name,
|
||||
email: user.email,
|
||||
phone_number: user.phone_number,
|
||||
ou_id: user.ou_id,
|
||||
ou_name: user.ou_name,
|
||||
is_leader: user.is_leader,
|
||||
user_role: userRole
|
||||
};
|
||||
|
||||
const frontendJWT = JWTUtils.generateJWT(jwtUserInfo, mockTokenExpiresIn);
|
||||
|
||||
// 打印JWT生成信息
|
||||
console.log("=== 测试用户登录 - JWT生成信息 ===");
|
||||
console.log("用户信息:", jwtUserInfo);
|
||||
console.log("生成的JWT:", frontendJWT);
|
||||
console.log("JWT过期时间:", JWTUtils.getJWTExpiration(frontendJWT));
|
||||
console.log("JWT解析结果:", JWTUtils.decodeJWT(frontendJWT));
|
||||
console.log("JWT验证结果:", JWTUtils.verifyJWT(frontendJWT));
|
||||
|
||||
// 创建session,保持与OAuth登录相同的数据结构
|
||||
session.set("isAuthenticated", true);
|
||||
session.set("accessToken", "mock_access_token_for_test"); // 模拟的访问令牌
|
||||
session.set("refreshToken", "mock_refresh_token_for_test"); // 模拟的刷新令牌
|
||||
session.set("tokenIssuedAt", Date.now());
|
||||
session.set("tokenExpiresIn", mockTokenExpiresIn);
|
||||
session.set("userRole", userRole);
|
||||
session.set("frontendJWT", frontendJWT);
|
||||
|
||||
// 构建与OAuth登录相同结构的userInfo
|
||||
const enhancedUserInfo = {
|
||||
// 保持与callback.tsx中相同的数据结构
|
||||
sub: user.sub,
|
||||
username: user.username,
|
||||
nick_name: user.nick_name,
|
||||
phone_number: user.phone_number,
|
||||
email: user.email,
|
||||
ou_id: user.ou_id,
|
||||
ou_name: user.ou_name,
|
||||
status: user.status,
|
||||
is_leader: user.is_leader,
|
||||
// 增强字段,与OAuth登录保持一致
|
||||
user_id: user.id,
|
||||
user_role: userRole,
|
||||
frontend_jwt: frontendJWT
|
||||
};
|
||||
|
||||
session.set("userInfo", enhancedUserInfo);
|
||||
|
||||
// 打印session信息
|
||||
console.log("=== 测试用户登录 - Session信息 ===");
|
||||
console.log("保存到session的userInfo:", enhancedUserInfo);
|
||||
console.log("session数据结构:", {
|
||||
isAuthenticated: true,
|
||||
userRole: userRole,
|
||||
accessToken: "mock_access_token_for_test",
|
||||
refreshToken: "mock_refresh_token_for_test",
|
||||
tokenIssuedAt: Date.now(),
|
||||
tokenExpiresIn: mockTokenExpiresIn,
|
||||
frontendJWT: frontendJWT,
|
||||
userInfo: enhancedUserInfo
|
||||
});
|
||||
|
||||
const cookie = await sessionStorage.commitSession(session);
|
||||
|
||||
console.log("=== 测试用户登录完成 ===");
|
||||
console.log("用户:", user.username);
|
||||
console.log("角色:", userRole);
|
||||
console.log("重定向到:", redirectTo);
|
||||
|
||||
return new Response(null, {
|
||||
status: 302,
|
||||
headers: {
|
||||
Location: redirectTo,
|
||||
"Set-Cookie": cookie,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// 如果用户不存在,重定向到登录页面并显示错误
|
||||
return redirect(`/login?error=${encodeURIComponent("测试用户不存在")}`);
|
||||
|
||||
Reference in New Issue
Block a user