perf(admin): 整理admin鉴权相关的逻辑并强化对于token过期的处理

pull/70/head
moonrailgun 2 years ago
parent 6dcfd647f5
commit 998e7a6707

@ -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'

@ -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) {

@ -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();
}
};

@ -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');

@ -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();

@ -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"

Loading…
Cancel
Save