diff --git a/client/package.json b/client/package.json index a4405f7..130d7fe 100644 --- a/client/package.json +++ b/client/package.json @@ -24,6 +24,7 @@ "react-router": "~3.0.2", "react-router-redux": "^4.0.8", "redux": "^3.6.0", + "redux-auth-wrapper": "^1.0.0", "redux-form": "^6.6.1", "redux-thunk": "^2.2.0" }, diff --git a/client/src/components/App.js b/client/src/components/App.js index eb779a1..9e6b23e 100644 --- a/client/src/components/App.js +++ b/client/src/components/App.js @@ -1,21 +1,29 @@ import React, { Component } from 'react'; import { Link } from 'react-router'; import { connect } from 'react-redux'; +import { isEmpty } from 'lodash'; import { getUser, logout } from '../store/api'; export class App extends Component { - logout = () => this.props.logout(this.props.user); + logout = (e) => { + e.preventDefault(); + this.props.logout(this.props.user); + } render() { + const { user } = this.props; return (

Posts |  Categories |  Users |  - Log in |  - Logout + { + isEmpty(user) + ? Log in + : Logout + }


{this.props.children} diff --git a/client/src/components/Auth/Login.js b/client/src/components/Auth/Login.js index 8d4b631..c5cf826 100644 --- a/client/src/components/Auth/Login.js +++ b/client/src/components/Auth/Login.js @@ -1,11 +1,12 @@ import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; +import { replace } from 'react-router-redux'; import LoginForm from './LoginForm'; import { login } from '../../store/api'; export class Login extends Component { - onSubmit = (values) => this.props.login(values); + onSubmit = (values) => this.props.login(values).then(this.props.redirect); render() { return ( @@ -16,11 +17,11 @@ export class Login extends Component { } }; -export const mapStateToProps = (state) => ({ -}); +export const mapStateToProps = (state) => ({}); -export const mapDispatchToProps = (dispatch) => ({ +export const mapDispatchToProps = (dispatch, props) => ({ login: (payload) => dispatch(login('auth', payload)), + redirect: () => dispatch(replace(props.location.query.redirect || '/')), }); export default connect(mapStateToProps, mapDispatchToProps)(Login); diff --git a/client/src/components/Routes.js b/client/src/components/Routes.js index eea35a0..3fc40b3 100644 --- a/client/src/components/Routes.js +++ b/client/src/components/Routes.js @@ -1,12 +1,16 @@ import React, { PureComponent, PropTypes } from 'react'; -import { Router, Route, IndexRoute } from 'react-router'; +import { Router, Route, IndexRoute, browserHistory } from 'react-router'; +import { UserAuthWrapper } from 'redux-auth-wrapper'; +import { getUser } from '../store/api'; import App from './App'; import { PostList, PostEdit } from './Posts'; import { CategoryList, CategoryEdit } from './Categories'; import { UserList, UserEdit } from './Users'; import { Login } from './Auth'; +const UserIsAuthenticated = UserAuthWrapper({ authSelector: getUser }); + export default class Routes extends PureComponent { static propTypes = { history: PropTypes.object, @@ -17,7 +21,7 @@ export default class Routes extends PureComponent { return ( - + @@ -26,8 +30,8 @@ export default class Routes extends PureComponent { - + ); }