Skip to content

Commit

Permalink
perf(admin): 整理admin鉴权相关的逻辑并强化对于token过期的处理
Browse files Browse the repository at this point in the history
  • Loading branch information
moonrailgun committed Jan 26, 2023
1 parent 6dcfd64 commit 998e7a6
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 29 deletions.
28 changes: 3 additions & 25 deletions server/admin/app/ra/App.tsx
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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'
Expand Down
16 changes: 14 additions & 2 deletions server/admin/app/ra/authProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export const authProvider: AuthProvider = {
return response.json();
})
.then((auth) => {
console.log(auth);
localStorage.setItem(authStorageKey, JSON.stringify(auth));
})
.catch(() => {
Expand All @@ -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) {
Expand Down
17 changes: 17 additions & 0 deletions server/admin/app/ra/request.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import axios from 'axios';
import { authStorageKey } from './authProvider';
import _set from 'lodash/set';
import { fetchUtils } from 'react-admin';

/**
* 创建请求实例
Expand All @@ -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();
}
};
File renamed without changes.
3 changes: 2 additions & 1 deletion server/admin/app/server/router/api.ts
Original file line number Diff line number Diff line change
@@ -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();
Expand Down Expand Up @@ -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');
Expand Down
2 changes: 1 addition & 1 deletion server/admin/app/server/router/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit 998e7a6

Please sign in to comment.