This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/rocketmq-studio by this push:
new b30881f fix: align login response contract (#492)
b30881f is described below
commit b30881fd2bdad47b22185cec35595f512128bfba
Author: wizcraft_kris <[email protected]>
AuthorDate: Fri Jul 24 13:41:40 2026 +0800
fix: align login response contract (#492)
Align frontend LoginResponse type with backend LoginVO contract: change
flat username/role to nested user.username/admin structure.
---
web/src/api/auth.test.ts | 12 ++++++++----
web/src/api/auth.ts | 7 +++++--
web/src/pages/login/index.tsx | 3 +--
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/web/src/api/auth.test.ts b/web/src/api/auth.test.ts
index 6db27b1..c0fcc8f 100644
--- a/web/src/api/auth.test.ts
+++ b/web/src/api/auth.test.ts
@@ -40,8 +40,11 @@ describe('Auth API', () => {
it('login should post credentials and return token data', async () => {
const mockResponse = {
token: 'jwt-token-123',
- username: 'admin',
- role: 'ADMIN',
+ expiresIn: 86400,
+ user: {
+ username: 'admin',
+ admin: true,
+ },
};
mock.onPost('/auth/login', { username: 'admin', password: 'secret'
}).reply(200, {
data: mockResponse,
@@ -50,8 +53,9 @@ describe('Auth API', () => {
const result = await login('admin', 'secret');
expect(result).toEqual(mockResponse);
expect(result.token).toBe('jwt-token-123');
- expect(result.username).toBe('admin');
- expect(result.role).toBe('ADMIN');
+ expect(result.expiresIn).toBe(86400);
+ expect(result.user.username).toBe('admin');
+ expect(result.user.admin).toBe(true);
});
it('login should handle error response', async () => {
diff --git a/web/src/api/auth.ts b/web/src/api/auth.ts
index 5d1530d..5abeb80 100644
--- a/web/src/api/auth.ts
+++ b/web/src/api/auth.ts
@@ -25,8 +25,11 @@ export interface LoginRequest {
export interface LoginResponse {
token: string;
- username: string;
- role: string;
+ expiresIn: number;
+ user: {
+ username: string;
+ admin: boolean;
+ };
}
// ─── Auth ───────────────────────────────────────────────────────
diff --git a/web/src/pages/login/index.tsx b/web/src/pages/login/index.tsx
index 715201c..37ceca1 100644
--- a/web/src/pages/login/index.tsx
+++ b/web/src/pages/login/index.tsx
@@ -41,8 +41,7 @@ const LoginPage = () => {
setLoading(true);
try {
const data = await loginApi(values.username, values.password);
- authLogin(data.token, data.username);
- localStorage.setItem('userrole', data.role);
+ authLogin(data.token, data.user.username);
message.success(t('login.success'));
navigate('/', { replace: true });
} catch (err: unknown) {