|
@@ -1,13 +1,23 @@
|
1
|
|
-import React, { useState } from 'react'
|
2
|
|
-import { useLocation, Navigate } from "react-router-dom"
|
|
1
|
+import React, { useState, useEffect } from 'react';
|
|
2
|
+import { useLocation, Navigate } from "react-router-dom";
|
|
3
|
+import { useModel } from '@/store';
|
|
4
|
+import { queryCurrentUser } from '@/services/user';
|
3
|
5
|
|
4
|
6
|
export default (props) => {
|
5
|
|
- const { user } = props
|
6
|
|
- const location = useLocation()
|
|
7
|
+ const { user, setUser } = useModel('user');
|
|
8
|
+ const [userStatus, setUserStatus] = useState(user && user.id ? 1 : 0);
|
7
|
9
|
|
8
|
|
- return props.children
|
|
10
|
+ useEffect(() => {
|
|
11
|
+ if (!user || !user.id) {
|
|
12
|
+ queryCurrentUser().then((res) => {
|
|
13
|
+ setUser(res);
|
|
14
|
+ setUserStatus(1);
|
|
15
|
+ }).catch(() => {
|
|
16
|
+ setUserStatus(-1);
|
|
17
|
+ });
|
|
18
|
+ }
|
|
19
|
+ }, []);
|
9
|
20
|
|
10
|
|
- // return !user || !user.isLoged ?
|
11
|
|
- // <Navigate to="/login" state={{ from: location }} replace /> :
|
12
|
|
- // props.children
|
|
21
|
+ return userStatus === 0 ? null :
|
|
22
|
+ userStatus === -1 ? <Navigate to="/login?back=true" /> : props.children;
|
13
|
23
|
}
|