yapi/client/components/AuthenticatedComponent.js
2017-08-10 21:20:57 +08:00

52 lines
1.1 KiB
JavaScript

import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types'
import { changeMenuItem } from '../reducer/modules/menu'
@connect(
(state) => {
return{
isAuthenticated: state.user.isLogin
}
},
{
changeMenuItem
}
)
export function requireAuthentication(Component) {
return class AuthenticatedComponent extends React.Component {
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>
)
}
}
}