-
Notifications
You must be signed in to change notification settings - Fork 100
Description
主要发现:
初始化版本就存在前后端不匹配的问题:
前端期望 LoginResponse 包含 user 对象
但后端只返回 access_token 和 token_type
这是原始项目的 bug,不是我引入的
我的修改:
在 api/schemas/auth.py 中:
添加了 from future import annotations
重新排序了类(UserInfo 移到 Token 之前)
在 Token 类中添加了 user: UserInfo 字段
在 api/routers/auth.py 中:
添加了 Form 导入(虽然最后没用到)
修改了 login 函数的返回值,添加了用户信息
web/src/lib/api.ts 的问题:
这个文件在初始化版本中不存在
可能是构建过程生成的,或者是用户手动添加的
让我用中文给用户一个清晰的对比总结。
好的,我来对比一下当前版本和初始化版本的差异。
对比结果总结
- 初始化版本就存在的问题(原始 Bug)
前后端接口不匹配:
前端期望(初始化版本 web/src/types/index.ts):
export interface LoginResponse {
access_token: string;
token_type: string;
user: User; // 期望有 user 对象
}
后端原始返回(初始化版本 api/routers/auth.py:106):
return Token(access_token=access_token, token_type="bearer")
只返回 access_token 和 token_type,没有 user!
结论:这个前后端不匹配的问题是原始项目就存在的 bug,不是我引入的。这就是导致登录失败显示 "[object Object]" 的根本原因。
- 我做的修改(已修复的问题)
修改 1:api/schemas/auth.py
- from future import annotations # 添加以支持前向引用
-
class Token(BaseModel):
-
access_token: str -
token_type: str = "bearer"class UserInfo(BaseModel):
id: int
username: str
is_active: bool = True
- class Token(BaseModel):
-
access_token: str -
token_type: str = "bearer" -
user: UserInfo # 新增 user 字段
修改 2:api/routers/auth.py:107-113
- return Token(access_token=access_token, token_type="bearer")
-
返回Token和用户信息
- return Token(
-
access_token=access_token, -
token_type="bearer", -
user=UserInfo(id=user["id"], username=user["username"], is_active=user["is_active"]) - )
- web/src/lib/api.ts 的情况
初始化版本中 不存在 web/src/lib/ 目录
当前版本中这个文件存在,可能是:
Next.js 构建过程生成的
或者是后来手动添加的
总结
✅ 原始项目确实存在 bug:前端期望返回 user 对象,但后端没有实现
✅ 我的修改修复了这个 bug:现在后端正确返回用户信息,前后端接口匹配
✅ 登录功能现在可以正常工作:不会再出现 "[object Object]" 错误
这个项目从 GitHub 下载后确实存在前后端不一致的问题,可能是:
开发过程中前后端版本不同步
或者是项目开发不完整就提交了