diff --git a/front-api/controllers/user.rb b/front-api/controllers/user.rb index 82058c5..b9ef02b 100644 --- a/front-api/controllers/user.rb +++ b/front-api/controllers/user.rb @@ -1,4 +1,8 @@ +post '/user/logout' do + response.delete_cookie("ribica_auth", :path => "/") +end + post '/user/login' do request.body.rewind login_details = JSON.parse(request.body.read) diff --git a/front-ui/app/actions/userActions.js b/front-ui/app/actions/userActions.js index 1df9eb1..594f67f 100644 --- a/front-ui/app/actions/userActions.js +++ b/front-ui/app/actions/userActions.js @@ -1,64 +1,105 @@ var AppDispatcher = require('../dispatcher/appDispatcher'); var UserConstants = require('../constants/userConstants'); +var superagent = require('superagent'); +var globals = require('../globals'); +var NavigationActions = require('./navigationActions'); -// Define action methods var UserActions = { - registerUser: function(user) { - AppDispatcher.handleAction({ - actionType: UserConstants.REGISTER_USER, - user: user - }); + registerUser: function(user) { + AppDispatcher.handleAction({ + actionType: UserConstants.REGISTER_USER, + user: user + }); - user.save(null, { - success: function() { - UserActions.registrationSuccess(); - }, - error: function(model, response, options) { - UserActions.registrationFailure(response); - } - }); - }, - registrationSuccess: function() { - AppDispatcher.handleAction({ - actionType: UserConstants.REGISTRATION_SUCCESS - }); - }, - registrationFailure: function(error) { - AppDispatcher.handleAction({ - actionType: UserConstants.REGISTRATION_FAILURE, - error: error - }); - }, - userLogin: function(loginDetails) { - AppDispatcher.handleAction({ - actionType: UserConstants.USER_LOGIN, - loginDetails: loginDetails - }); + user.save(null, { + success: function() { + UserActions.registrationSuccess(); + }, + error: function(model, response, options) { + UserActions.registrationFailure(response); + } + }); + }, + registrationSuccess: function() { + AppDispatcher.handleAction({ + actionType: UserConstants.REGISTRATION_SUCCESS + }); + }, + registrationFailure: function(error) { + AppDispatcher.handleAction({ + actionType: UserConstants.REGISTRATION_FAILURE, + error: error + }); + }, + userLogout:function() { + AppDispatcher.handleAction({ + actionType: UserConstants.USER_LOGOUT + }); - loginDetails.save(null, { - success: function(){ - alert('ok') - UserActions.loginSuccess(); - }, + superagent + .post(globals.ApiUrl + '/user/logout') + .withCredentials() + .end(function(response){ + UserActions.logoutDone(); + }); + }, + logoutDone: function() { + AppDispatcher.handleAction({ + actionType: UserConstants.USER_LOGOUT_DONE + }); + }, + userLogin: function(loginDetails) { + AppDispatcher.handleAction({ + actionType: UserConstants.USER_LOGIN + }); - error: function(model, response, options){ - alert('error!'); - UserActions.loginFailure(response); - } - }); - }, - loginSuccess: function() { - AppDispatcher.handleAction({ - actionType: UserConstants.LOGIN_SUCCESS - }); - }, - loginFailure: function(error) { - AppDispatcher.handleAction({ - actionType: UserConstants.LOGIN_FAILURE, - error: error - }); - } + superagent.post(globals.ApiUrl + '/user/login') + .withCredentials() + .send(loginDetails) + .end(function(response) { + if(response.unauthorized){ + UserActions.loginFailure(response.body); + } else { + UserActions.loginSuccess(response.body); + } + }); + }, + loginSuccess: function(user) { + AppDispatcher.handleAction({ + actionType: UserConstants.LOGIN_SUCCESS, + user: user + }); + }, + loginFailure: function(error) { + AppDispatcher.handleAction({ + actionType: UserConstants.LOGIN_FAILURE, + error: error + }); + }, + checkLogin: function() { + AppDispatcher.handleAction({ + actionType: UserConstants.CHECK_LOGIN + }); + + superagent + .get(globals.ApiUrl + '/user') + .withCredentials() + .end(function(response){ + if(response.unauthorized){ + UserActions.checkLoginArrived(null, true); + } else { + UserActions.checkLoginArrived(response.body); + } + }); + }, + checkLoginArrived: function(user, error) { + AppDispatcher.handleAction({ + actionType: UserConstants.CHECK_LOGIN_ARRIVED, + user: user, + error: error + }); + } }; module.exports = UserActions; diff --git a/front-ui/app/components/account/login.js b/front-ui/app/components/account/login.js index 75e6af5..8494f1c 100644 --- a/front-ui/app/components/account/login.js +++ b/front-ui/app/components/account/login.js @@ -17,13 +17,14 @@ var Login = React.createClass({ UserStore.removeChangeListener(this.onUserStoreChange); }, onUserStoreChange: function() { - var loginState = UserStore.getLoginState(); - - if (loginState.loggedIn) { - NavigationActions.goToHome(); - } else { - + if(this.isMounted()) { + var loginState = UserStore.getLoginState(); this.setState({login: loginState}); + if (loginState.loggedIn) { + setTimeout(function(){ + NavigationActions.goToHome(); + }, 0); + } } }, getInitialState: function() { diff --git a/front-ui/app/components/shared/loginStatus.js b/front-ui/app/components/shared/loginStatus.js index 235f20a..b98d668 100644 --- a/front-ui/app/components/shared/loginStatus.js +++ b/front-ui/app/components/shared/loginStatus.js @@ -2,11 +2,47 @@ var React = require("react"), Router = require("react-router"), Link = Router.Link; +var UserStore = require('../../stores/userStore'); +var UserActions = require('../../actions/userActions'); + var LoginStatus = React.createClass({ + getInitialState: function() { + return UserStore.getLoginState(); + }, + componentDidMount: function() { + UserActions.checkLogin(); + UserStore.addChangeListener(this.onUserStateChange); + }, + componentWillReceiveProps: function() { + this.update(); + }, + componentWillUnmount: function() { + UserStore.removeChangeListener(this.onUserStateChange); + }, + onUserStateChange: function() { + this.update(); + }, + update: function() { + this.setState(UserStore.getLoginState()); + }, + logout: function(e){ + e.preventDefault(); + UserActions.userLogout(); + }, render : function() { - return (