Слияние кода завершено, страница обновится автоматически
import React from 'react';
import { connect } from 'dva';
import { Redirect } from 'umi';
import PageLoading from '../components/PageLoading';
import { stringify } from 'querystring';
import cookie from '../utils/cookie';
import globalUtil from '../utils/global';
import ErrorBoundary from './ErrorBoundary';
class SecurityLayout extends React.PureComponent {
state = {
isReady: false,
};
componentDidMount() {
const { dispatch } = this.props;
if (dispatch) {
dispatch({
type: 'global/fetchRainbondInfo',
callback: info => {
if (info) {
this.fetchUserInfo();
}
},
});
}
}
fetchUserInfo = () => {
const { dispatch } = this.props;
if (dispatch) {
dispatch({
type: 'user/fetchCurrent',
callback: () => {
this.setState({
isReady: true,
});
},
handleError: () => {
this.setState({
isReady: true,
});
},
});
}
};
render() {
const { children, currentUser, needLogin } = this.props;
const { isReady } = this.state;
// You can replace it to your authentication rule (such as check token exists)
const token = cookie.get('token');
const isLogin = token && currentUser;
const queryString = stringify({
redirect: window.location.href,
});
if (needLogin) {
globalUtil.removeCookie();
return <Redirect to={`/user/login?${queryString}`} />;
}
if (!isReady) {
return <PageLoading />;
}
if (isReady && !isLogin && window.location.pathname !== '/user/login') {
globalUtil.removeCookie();
return <Redirect to={`/user/login?${queryString}`} />;
}
return <ErrorBoundary children={children} />;
}
}
export default connect(({ user, loading, global }) => ({
currentUser: user.currentUser,
loading: loading.models.user,
needLogin: global.needLogin,
}))(SecurityLayout);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )