diff --git a/browser/main/Actions/AuthActions.js b/browser/main/Actions/AuthActions.js index a9c437fe..6867b87c 100644 --- a/browser/main/Actions/AuthActions.js +++ b/browser/main/Actions/AuthActions.js @@ -4,5 +4,6 @@ module.exports = Reflux.createActions([ 'login', 'register', 'logout', - 'updateProfile' + 'updateProfile', + 'refreshUser' ]) diff --git a/browser/main/Containers/MainContainer.jsx b/browser/main/Containers/MainContainer.jsx index 95ed15b5..683c3f11 100644 --- a/browser/main/Containers/MainContainer.jsx +++ b/browser/main/Containers/MainContainer.jsx @@ -4,6 +4,8 @@ var ReactRouter = require('react-router') var RouteHandler = ReactRouter.RouteHandler var request = require('superagent') +var AuthActions = require('../Actions/AuthActions') + var AuthStore = require('../Stores/AuthStore') var apiUrl = require('../../../config').apiUrl @@ -43,7 +45,7 @@ module.exports = React.createClass({ var user = JSON.parse(localStorage.getItem('user')) if (user != null) { - user.Planets.forEach(fetchPlanet) + AuthActions.refreshUser() return } this.transitionTo('login') @@ -55,9 +57,9 @@ module.exports = React.createClass({ if (res == null || res.status == null) { return } - + var user if (res.status === 'loggedIn' || res.status === 'registered') { - var user = res.data + user = res.data var planet = user.Planets.length > 0 ? user.Planets[0] : null if (planet == null) { this.transitionTo('user', {userName: user.name}) @@ -72,6 +74,13 @@ module.exports = React.createClass({ this.transitionTo('login') return } + + if (res.status === 'userRefreshed') { + console.log('refreshed') + user = res.data + user.Planets.forEach(fetchPlanet) + return + } }, render: function () { // Redirect Login state diff --git a/browser/main/Stores/AuthStore.js b/browser/main/Stores/AuthStore.js index bc29dd35..9918a9b1 100644 --- a/browser/main/Stores/AuthStore.js +++ b/browser/main/Stores/AuthStore.js @@ -12,6 +12,7 @@ var AuthStore = Reflux.createStore({ this.listenTo(AuthActions.register, this.register) this.listenTo(AuthActions.logout, this.logout) this.listenTo(AuthActions.updateProfile, this.updateProfile) + this.listenTo(AuthActions.refreshUser, this.refreshUser) }, // Reflux Store login: function (input) { @@ -58,6 +59,30 @@ var AuthStore = Reflux.createStore({ }) }.bind(this)) }, + refreshUser: function () { + request + .get(apiUrl + 'auth/user') + .set({ + Authorization: 'Bearer ' + localStorage.getItem('token') + }) + .end(function (err, res) { + if (err) { + console.error(err) + if (res.status === 401 || res.status === 403) { + AuthActions.logout() + } + return + } + + var user = res.body + localStorage.setItem('user', JSON.stringify(user)) + + this.trigger({ + status: 'userRefreshed', + data: user + }) + }.bind(this)) + }, logout: function () { localStorage.removeItem('token') localStorage.removeItem('user')