From 8d74f92927efd2a248aa3fab8c952ab5ecf54523 Mon Sep 17 00:00:00 2001 From: irismarie Date: Thu, 18 Feb 2021 15:08:14 +0100 Subject: [PATCH] redirect after logout for external auth --- src/app.js | 5 +++++ src/user/login-store.js | 3 +-- src/user/login.js | 19 +++++++++++-------- src/user/logout.js | 34 +++++++++++++++++++++++++++++----- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/app.js b/src/app.js index bcaced0..eb1959e 100644 --- a/src/app.js +++ b/src/app.js @@ -45,6 +45,11 @@ class App extends React.Component { constructor(props) { super(props); + + AppDispatcher.dispatch({ + type: 'config/load', + }); + this.state = { showSidebarMenu: false, } diff --git a/src/user/login-store.js b/src/user/login-store.js index 7eb4b2b..3e0eba6 100644 --- a/src/user/login-store.js +++ b/src/user/login-store.js @@ -46,8 +46,7 @@ class LoginStore extends ReduceStore { return Object.assign({}, state, { config: action.data }); case 'config/load-error': - console.log("config load error"); - return Object.assign({}, state, { config: null }); + return Object.assign({}, state, { config: null}); case 'users/login': UsersDataManager.login(action.username, action.password); diff --git a/src/user/login.js b/src/user/login.js index a9814b1..ea38f89 100644 --- a/src/user/login.js +++ b/src/user/login.js @@ -29,25 +29,28 @@ import LoginStore from './login-store' import AppDispatcher from '../common/app-dispatcher'; class Login extends Component { + constructor(props) { + super(props); - static getStores(){ + // load config in case the user goes directly to /login + // otherwise it will be loaded in app constructor + AppDispatcher.dispatch({ + type: 'config/load', + }); + } + + static getStores() { return [LoginStore] } static calculateState(prevState, props) { // We need to work with the login store here to trigger the re-render upon state change after login // Upon successful login, the token and currentUser are stored in the local storage as strings - const config = LoginStore.getState().config; - if (config === null) { - AppDispatcher.dispatch({ - type: 'config/load', - }); - } return { loginMessage: LoginStore.getState().loginMessage, token: LoginStore.getState().token, currentUser: LoginStore.getState().currentUser, - config: config, + config: LoginStore.getState().config, } } diff --git a/src/user/logout.js b/src/user/logout.js index 4b9aa81..bae8d96 100644 --- a/src/user/logout.js +++ b/src/user/logout.js @@ -17,12 +17,28 @@ import React from 'react'; import { Redirect } from 'react-router-dom'; +import { Container } from 'flux/utils'; import AppDispatcher from '../common/app-dispatcher'; -import Config from '../config.js'; +import LoginStore from './login-store' class Logout extends React.Component { + + static getStores() { + return [LoginStore] + } + + static calculateState(prevState, props) { + return { + config: LoginStore.getState().config, + } + } + componentDidMount() { + this.resetValues(); + } + + resetValues() { AppDispatcher.dispatch({ type: 'users/logout' }); @@ -35,10 +51,18 @@ class Logout extends React.Component { } render() { - return ( - - ); + if (this.state.config) { + let logout_url = _.get(this.props.config, ['authentication', 'logout_url']) + if (logout_url) { + this.resetValues(); + window.location = logout_url; + } + } + return ( + + ); } } -export default Logout; +let fluxContainerConverter = require('../common/FluxContainerConverter'); +export default Container.create(fluxContainerConverter.convert(Logout)); \ No newline at end of file