瀏覽代碼

增加token验证 延时 用户信息存储

zhaojijng 2 年之前
父節點
當前提交
b5472d237f

+ 11 - 3
config/proxy.ts

@@ -10,11 +10,19 @@ export default {
   dev: {
     // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
     '/sgadmin/duoduo-service': {
-      target: 'https://duoduoenv.sagacloud.cn/',
-      //target: 'http://10.100.28.79',
+      //target: 'https://duoduoenv.sagacloud.cn/',
+      target: 'http://10.100.28.79',
       changeOrigin: true,
       pathRewrite: {
-        '^/sgadmin/duoduo-service': '/duoduo-service',
+        '^/sgadmin/duoduo-service': '/sgadmin/duoduo-service',
+      },
+    },
+    '/sgadmin/sso': {
+      //target: 'https://duoduoenv.sagacloud.cn/',
+      target: 'http://10.100.28.79',
+      changeOrigin: true,
+      pathRewrite: {
+        '^/sgadmin/sso': '/sgadmin/sso',
       },
     },
   },

+ 4 - 0
config/routes.ts

@@ -27,6 +27,10 @@
         redirect: '/environment',
       },
       {
+        path: '/noAuth',
+        component: './NoAuth',
+      },
+      {
         path: '/environment',
         name: 'environment',
         component: './Environment',

+ 111 - 26
src/app.tsx

@@ -1,10 +1,8 @@
-import type { Settings as LayoutSettings } from '@ant-design/pro-layout';
 import { PageLoading } from '@ant-design/pro-layout';
-import { history } from 'umi';
-import { currentUser as queryCurrentUser } from './services/ant-design-pro/api';
-import defaultSettings from '../config/defaultSettings';
-
-const loginPath = '/user/login';
+import { history, useModel } from 'umi';
+import { checkToken, reFreshCheckToken } from '@/services/ant-design-pro/environment';
+import userData from '@/config/user';
+const loginPath = '/noAuth';
 
 /** 获取用户信息比较慢的时候会展示一个 loading */
 export const initialStateConfig = {
@@ -15,37 +13,124 @@ export const initialStateConfig = {
  * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
  * */
 export async function getInitialState(): Promise<{
-  settings?: Partial<LayoutSettings>;
+  // settings?: Partial<LayoutSettings>;
   currentUser?: API.CurrentUser;
-  loading?: boolean;
-  fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
+  fetchUser?: () => Promise<API.CurrentUser | undefined>;
+  //loading?: boolean;
+  //fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
 }> {
-  const fetchUserInfo = async () => {
+  debugger;
+  const { location } = history;
+
+  let access_token: any = location.query.access_token;
+  let refresh_token: any = location.query.refresh_token;
+
+  //如果有值 存起来
+  if (access_token) {
+    localStorage.setItem('access_token', access_token);
+    console.log("localStorage.getItem('access_token')", localStorage.getItem('access_token'));
+  }
+  if (refresh_token) {
+    localStorage.setItem('refresh_token', refresh_token);
+  }
+
+  //如果没有  取缓存
+  //   if (!refresh_token) {
+  //     refresh_token = localStorage.getItem('refresh_token');
+  //   }
+
+  const fetchUser = async () => {
     try {
-      const msg = await queryCurrentUser();
-      return msg.data;
-    } catch (error) {
-      // history.push(loginPath);
+      debugger;
+      access_token = localStorage.getItem('access_token');
+      const res = await checkToken({ token: access_token });
+      var resUser = res.data;
+    } catch (err) {
+      history.push(loginPath);
     }
 
-    return undefined;
+    if (resUser) {
+      var userObj = userData.getInstance();
+      // console.log('user.name', user.age);
+      userObj.setUser(resUser);
+      return resUser;
+    } else {
+      history.push(loginPath);
+      return undefined;
+    }
   };
-  // 如果是登录页面,不执行
-  if (history.location.pathname !== loginPath) {
-    // const currentUser = await fetchUserInfo();
 
-    return {
-      fetchUserInfo,
-      //currentUser,
-      settings: defaultSettings,
-    };
-  }
+  const currentUser = await fetchUser();
+
+  const reFreshUser = async () => {
+    refresh_token = localStorage.getItem('refresh_token');
+
+    const res = await reFreshCheckToken({
+      zjfreshtoken: refresh_token,
+    });
+    if (res.refresh_token) {
+      console.log('refresh_token', res.refresh_token);
+      localStorage.setItem('refresh_token', res.refresh_token);
+    } else {
+      //如果刷新token失败
+      //history.push(loginPath);
+    }
+    //20分钟后再执行
+    setTimeout(() => {
+      reFreshUser();
+    }, 1200000);
+  };
+
+  reFreshUser();
+
+  // || {
+  //   companyId: '245e7060643811eb934c0237aedb39a6',
+  //   createDate: 1642388952000,
+  //   depName: '[["研发算法组","上格云","博锐尚格科技股份有限公司"]]',
+  //   firstUseTime: '2020-10-16 18:37:05',
+  //   id: '2d2440710d4548f3afa55c4e8244538e',
+  //   job: '研发工程师',
+  //   manageUserType: 1,
+  //   name: '赵小静',
+  //   phone: '18801040736',
+  //   projectId: 'Pj1101080259',
+  //   status: 2,
+  //   type: 1,
+  //   updateDate: 1642388952000,
+  // };
+
   return {
-    fetchUserInfo,
-    settings: defaultSettings,
+    currentUser,
+    fetchUser,
   };
 }
 
+export const request = {
+  requestInterceptors: [
+    (url: any, options: any) => {
+      return {
+        url,
+        options: {
+          ...options,
+          interceptors: true,
+        },
+      };
+    },
+  ],
+  responseInterceptors: [
+    async (response: any) => {
+      return response;
+    },
+  ],
+  errorHandler: (error: any) => {
+    const { response } = error;
+    if (!response) {
+      // message.error('您的网络发生异常,无法连接服务器');
+    }
+    throw error;
+  },
+};
+
 // ProLayout 支持的api https://procomponents.ant.design/components/layout
 // export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
 //   return {

+ 0 - 1
src/components/map/index.tsx

@@ -4,7 +4,6 @@ import { useModel } from 'umi';
 
 import cx from 'classnames';
 import Icon from '@/tenants-ui/Icon';
-import user from 'mock/user';
 
 type MapProps = {
   type: string;

+ 19 - 0
src/config/user.ts

@@ -0,0 +1,19 @@
+class UserData {
+  private static instance: UserData;
+  private constructor() {}
+  private user: any = { name: 'sss' };
+
+  static getInstance() {
+    if (!this.instance) {
+      this.instance = new UserData();
+    }
+    return this.instance;
+  }
+  public setUser(user: any) {
+    this.user = user;
+  }
+  public getUser() {
+    return this.user;
+  }
+}
+export default UserData;

+ 19 - 0
src/pages/NoAuth/index.less

@@ -0,0 +1,19 @@
+.headerRight {
+  display: flex;
+  align-items: center;
+  .check {
+    margin-left: 20px;
+    cursor: pointer;
+  }
+}
+
+.maptop {
+  box-sizing: border-box;
+  height: 44px;
+  padding-top: 10px;
+  padding-right: 20px;
+  .right {
+    float: right;
+    width: 210px;
+  }
+}

+ 8 - 0
src/pages/NoAuth/index.tsx

@@ -0,0 +1,8 @@
+import React, { useState, useEffect } from 'react';
+
+import styles from './index.less';
+
+const NoAuth: React.FC = () => {
+  return <>没有权限,请联系管理员</>;
+};
+export default NoAuth;

+ 29 - 2
src/services/ant-design-pro/environment.ts

@@ -1,6 +1,7 @@
 /** 登录接口 POST /api/login/account */
 import { request } from 'umi';
-import { projectId } from '@/config/api.js';
+import { projectId } from '@/config/api';
+import userData from '@/config/user';
 
 export async function getMapList(body: any, options?: { [key: string]: any }) {
   return request<API.MapInfoRes>('/sgadmin/duoduo-service/setup-service/map/queryMapInfo', {
@@ -57,7 +58,11 @@ function getProjectId() {
 }
 
 function commonParams() {
-  return `openid=9a1ecfbacb6b4f249bf2dd3ec7793ead&pubname=sagacareAndtenantslink&projectId=${getProjectId()}&userName=%E5%AE%89%E5%B0%8F%E9%9C%9E&userPhone=17611228068&userId=9a1ecfbacb6b4f249bf2dd3ec7793ead`;
+  var userObj = userData.getInstance();
+  const user = userObj.getUser();
+  return `openid=9a1ecfbacb6b4f249bf2dd3ec7793ead&pubname=sagacareAndtenantslink&projectId=${getProjectId()}&userName=${
+    user.name
+  }&userPhone=${user.phone}&userId=${user.id}`;
 }
 // chart
 export async function queryPropertyData(params: any, options?: { [key: string]: any }) {
@@ -115,3 +120,25 @@ export async function querySpace(body: any, options?: { [key: string]: any }) {
     },
   );
 }
+
+export async function checkToken(header: any, options?: { [key: string]: any }) {
+  return request<API.EnvironmentParam>(`/sgadmin/duoduo-service/setup-service/user/zjCheckToken`, {
+    method: 'GET',
+    headers: {
+      'Content-Type': 'application/json',
+      ...header,
+    },
+    ...(options || {}),
+  });
+}
+//http://10.100.28.79/sgadmin/sso//auth/zjFreshCheckToken
+export async function reFreshCheckToken(header: any, options?: { [key: string]: any }) {
+  return request<API.EnvironmentParam>(`/sgadmin/sso/auth/zjFreshCheckToken`, {
+    method: 'GET',
+    headers: {
+      'Content-Type': 'application/json',
+      ...header,
+    },
+    ...(options || {}),
+  });
+}

+ 5 - 1
src/services/ant-design-pro/equipment.js

@@ -1,5 +1,6 @@
 import { request } from 'umi';
 import { projectId } from '@/config/api.js';
+import userData from '@/config/user';
 
 function getProjectId() {
     //const id = window.localStorage.getItem('localProjectId')
@@ -8,7 +9,10 @@ function getProjectId() {
 }
 
 function commonParams() {
-    return `openid=9a1ecfbacb6b4f249bf2dd3ec7793ead&pubname=sagacareAndtenantslink&projectId=${getProjectId()}&userName=%E5%AE%89%E5%B0%8F%E9%9C%9E&userPhone=17611228068&userId=9a1ecfbacb6b4f249bf2dd3ec7793ead`;
+    var userObj = userData.getInstance();
+     const user = userObj.getUser();
+    return `openid=9a1ecfbacb6b4f249bf2dd3ec7793ead&pubname=sagacareAndtenantslink&projectId=${getProjectId()}&userName=${user.name
+        }&userPhone=${user.phone}&userId=${user.id}`;
 }
 
 

+ 1 - 0
src/services/ant-design-pro/typings.d.ts

@@ -21,6 +21,7 @@ declare namespace API {
     };
     address?: string;
     phone?: string;
+    [key: string]: any;
   };
 
   type LoginResult = {