From 998e7a67073fa8d5db514fd213ad6acb66bfe1f1 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Thu, 26 Jan 2023 17:14:00 +0800 Subject: [PATCH] =?UTF-8?q?perf(admin):=20=E6=95=B4=E7=90=86admin=E9=89=B4?= =?UTF-8?q?=E6=9D=83=E7=9B=B8=E5=85=B3=E7=9A=84=E9=80=BB=E8=BE=91=E5=B9=B6?= =?UTF-8?q?=E5=BC=BA=E5=8C=96=E5=AF=B9=E4=BA=8Etoken=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/admin/app/ra/App.tsx | 28 ++----------------- server/admin/app/ra/authProvider.ts | 16 +++++++++-- server/admin/app/ra/request.ts | 17 +++++++++++ .../{middleware.ts => middleware/auth.ts} | 0 server/admin/app/server/router/api.ts | 3 +- server/admin/app/server/router/network.ts | 2 +- server/package.json | 1 + 7 files changed, 38 insertions(+), 29 deletions(-) rename server/admin/app/server/{middleware.ts => middleware/auth.ts} (100%) diff --git a/server/admin/app/ra/App.tsx b/server/admin/app/ra/App.tsx index be42fbdd..558895c2 100644 --- a/server/admin/app/ra/App.tsx +++ b/server/admin/app/ra/App.tsx @@ -1,13 +1,6 @@ -import { - Admin, - Resource, - fetchUtils, - ShowGuesser, - CustomRoutes, - TranslationMessages, -} from 'react-admin'; +import { Admin, Resource, ShowGuesser, CustomRoutes } from 'react-admin'; import jsonServerProvider from 'ra-data-json-server'; -import { authProvider, authStorageKey } from './authProvider'; +import { authProvider } from './authProvider'; import { UserList } from './resources/user'; import React from 'react'; import { GroupList, GroupShow } from './resources/group'; @@ -23,22 +16,7 @@ import { Route } from 'react-router-dom'; import { TailchatNetwork } from './network'; import { TailchatLayout } from './layout'; import { i18nProvider } from './i18n'; - -const httpClient: typeof fetchUtils.fetchJson = (url, options = {}) => { - try { - if (!options.headers) { - options.headers = new Headers({ Accept: 'application/json' }); - } - const { token } = JSON.parse( - window.localStorage.getItem(authStorageKey) ?? '{}' - ); - (options.headers as Headers).set('Authorization', `Bearer ${token}`); - - return fetchUtils.fetchJson(url, options); - } catch (err) { - return Promise.reject(); - } -}; +import { httpClient } from './request'; const dataProvider = jsonServerProvider( // 'https://jsonplaceholder.typicode.com' diff --git a/server/admin/app/ra/authProvider.ts b/server/admin/app/ra/authProvider.ts index 1fd7ed2b..bb2b3be5 100644 --- a/server/admin/app/ra/authProvider.ts +++ b/server/admin/app/ra/authProvider.ts @@ -14,6 +14,7 @@ export const authProvider: AuthProvider = { return response.json(); }) .then((auth) => { + console.log(auth); localStorage.setItem(authStorageKey, JSON.stringify(auth)); }) .catch(() => { @@ -24,8 +25,19 @@ export const authProvider: AuthProvider = { localStorage.removeItem(authStorageKey); return Promise.resolve(); }, - checkAuth: () => - localStorage.getItem(authStorageKey) ? Promise.resolve() : Promise.reject(), + checkAuth: () => { + const auth = localStorage.getItem(authStorageKey); + if (auth) { + try { + const obj = JSON.parse(auth); + if (obj.expiredAt && Date.now() < obj.expiredAt) { + return Promise.resolve(); + } + } catch (err) {} + } + + return Promise.reject(); + }, checkError: (error) => { const status = error.status; if (status === 401 || status === 403) { diff --git a/server/admin/app/ra/request.ts b/server/admin/app/ra/request.ts index 74e1104e..b7390826 100644 --- a/server/admin/app/ra/request.ts +++ b/server/admin/app/ra/request.ts @@ -1,6 +1,7 @@ import axios from 'axios'; import { authStorageKey } from './authProvider'; import _set from 'lodash/set'; +import { fetchUtils } from 'react-admin'; /** * 创建请求实例 @@ -27,3 +28,19 @@ function createRequest() { } export const request = createRequest(); + +export const httpClient: typeof fetchUtils.fetchJson = (url, options = {}) => { + try { + if (!options.headers) { + options.headers = new Headers({ Accept: 'application/json' }); + } + const { token } = JSON.parse( + window.localStorage.getItem(authStorageKey) ?? '{}' + ); + (options.headers as Headers).set('Authorization', `Bearer ${token}`); + + return fetchUtils.fetchJson(url, options); + } catch (err) { + return Promise.reject(); + } +}; diff --git a/server/admin/app/server/middleware.ts b/server/admin/app/server/middleware/auth.ts similarity index 100% rename from server/admin/app/server/middleware.ts rename to server/admin/app/server/middleware/auth.ts diff --git a/server/admin/app/server/router/api.ts b/server/admin/app/server/router/api.ts index 27aaf7d7..cc72ad4d 100644 --- a/server/admin/app/server/router/api.ts +++ b/server/admin/app/server/router/api.ts @@ -1,7 +1,7 @@ import { Router } from 'express'; import raExpressMongoose from 'express-mongoose-ra-json-server'; import jwt from 'jsonwebtoken'; -import { adminAuth, auth, authSecret } from '../middleware'; +import { adminAuth, auth, authSecret } from '../middleware/auth'; import { networkRouter } from './network'; const router = Router(); @@ -30,6 +30,7 @@ router.post('/login', (req, res) => { res.json({ username, token: token, + expiredAt: new Date().valueOf() + 2 * 60 * 60 * 1000, }); } else { res.status(401).end('username or password incorrect'); diff --git a/server/admin/app/server/router/network.ts b/server/admin/app/server/router/network.ts index aac5ad40..50bcde8b 100644 --- a/server/admin/app/server/router/network.ts +++ b/server/admin/app/server/router/network.ts @@ -4,7 +4,7 @@ import { Router } from 'express'; import { broker } from '../broker'; -import { auth } from '../middleware'; +import { auth } from '../middleware/auth'; import _ from 'lodash'; const router = Router(); diff --git a/server/package.json b/server/package.json index c6299ec7..df2cbcc5 100644 --- a/server/package.json +++ b/server/package.json @@ -21,6 +21,7 @@ "migrate:up": "migrate-mongo up -f ./scripts/migrate-mongo-config.js", "docker:build": "node ./scripts/buildDocker.js", "dashboard": "ts-node ./scripts/dashboard.ts", + "admin": "cd admin && pnpm run build && pnpm run start", "plugin:install": "node ./scripts/installPlugin.js", "protobuf": "proto-loader-gen-types --longs=String --enums=String --defaults --oneofs --grpcLib=@grpc/grpc-js --outDir=proto/ proto/*.proto", "gen:swagger": "ts-node ./scripts/swagger.ts"