2017-07-24 11:35:31 +08:00
|
|
|
import React from 'react';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import PropTypes from 'prop-types'
|
2017-08-08 10:07:55 +08:00
|
|
|
import { changeMenuItem } from '../reducer/modules/menu'
|
2017-07-24 11:35:31 +08:00
|
|
|
|
2017-07-26 21:24:02 +08:00
|
|
|
@connect(
|
|
|
|
(state) => {
|
|
|
|
return{
|
2017-08-10 21:20:57 +08:00
|
|
|
isAuthenticated: state.user.isLogin
|
2017-07-26 21:24:02 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
changeMenuItem
|
|
|
|
}
|
|
|
|
)
|
2017-07-24 11:35:31 +08:00
|
|
|
export function requireAuthentication(Component) {
|
2017-07-26 21:24:02 +08:00
|
|
|
return class AuthenticatedComponent extends React.Component {
|
2017-07-24 11:35:31 +08:00
|
|
|
constructor(props){
|
|
|
|
super(props);
|
|
|
|
}
|
|
|
|
static propTypes ={
|
|
|
|
isAuthenticated : PropTypes.bool,
|
|
|
|
location: PropTypes.object,
|
|
|
|
dispatch: PropTypes.func,
|
|
|
|
history: PropTypes.object,
|
|
|
|
changeMenuItem:PropTypes.func
|
|
|
|
}
|
|
|
|
componentWillMount() {
|
|
|
|
this.checkAuth();
|
|
|
|
}
|
|
|
|
componentWillReceiveProps() {
|
|
|
|
this.checkAuth();
|
|
|
|
}
|
|
|
|
checkAuth() {
|
|
|
|
if( !this.props.isAuthenticated ){
|
|
|
|
this.props.history.push('/');
|
|
|
|
this.props.changeMenuItem('/');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
{this.props.isAuthenticated
|
|
|
|
? <Component {...this.props}/>
|
|
|
|
: null
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|