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 {
-
+
);
}