diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js index ee799c8cc..3d15484e8 100644 --- a/client/coral-framework/actions/auth.js +++ b/client/coral-framework/actions/auth.js @@ -1,5 +1,4 @@ import jwtDecode from 'jwt-decode'; -import {pym} from 'coral-framework'; import bowser from 'bowser'; import * as actions from '../constants/auth'; import * as Storage from '../helpers/storage'; @@ -24,7 +23,9 @@ export const showSignInDialog = () => (dispatch, getState) => { // Fire some actions inside the popups reducer, to initialize required state. const required = getState().asset.toJS().settings.requireEmailConfirmation; + const redirectUri = getState().auth.toJS().redirectUri; signInPopUp.coralStore.dispatch(setRequireEmailVerification(required)); + signInPopUp.coralStore.dispatch(setRedirectUri(redirectUri)); }; // Use `onunload` instead of `onbeforeunload` which is not supported in IOS Safari. @@ -100,11 +101,6 @@ export const cleanState = () => ({ type: actions.CLEAN_STATE }); -export const setRequireEmailVerification = (required) => ({ - type: actions.SET_REQUIRE_EMAIL_VERIFICATION, - required, -}); - // Sign In Actions const signInRequest = () => ({ @@ -224,7 +220,8 @@ const signUpRequest = () => ({type: actions.FETCH_SIGNUP_REQUEST}); const signUpSuccess = (user) => ({type: actions.FETCH_SIGNUP_SUCCESS, user}); const signUpFailure = (error) => ({type: actions.FETCH_SIGNUP_FAILURE, error}); -export const fetchSignUp = (formData, redirectUri) => (dispatch) => { +export const fetchSignUp = (formData) => (dispatch, getState) => { + const redirectUri = getState().auth.toJS().redirectUri; dispatch(signUpRequest()); coralApi('/users', { @@ -262,9 +259,9 @@ const forgotPasswordFailure = () => ({ type: actions.FETCH_FORGOT_PASSWORD_FAILURE }); -export const fetchForgotPassword = (email) => (dispatch) => { +export const fetchForgotPassword = (email) => (dispatch, getState) => { dispatch(forgotPasswordRequest(email)); - const redirectUri = pym.parentUrl || location.href; + const redirectUri = getState().auth.toJS().redirectUri; coralApi('/account/password/reset', { method: 'POST', body: {email, loc: redirectUri} @@ -342,7 +339,8 @@ const verifyEmailFailure = () => ({ type: actions.VERIFY_EMAIL_FAILURE }); -export const requestConfirmEmail = (email, redirectUri) => (dispatch) => { +export const requestConfirmEmail = (email) => (dispatch, getState) => { + const redirectUri = getState().auth.toJS().redirectUri; dispatch(verifyEmailRequest()); return coralApi('/users/resend-verify', { method: 'POST', @@ -356,5 +354,17 @@ export const requestConfirmEmail = (email, redirectUri) => (dispatch) => { // email might have already been verifyed dispatch(verifyEmailFailure(err)); + throw err; }); }; + +// Login Popup actions. +export const setRequireEmailVerification = (required) => ({ + type: actions.SET_REQUIRE_EMAIL_VERIFICATION, + required, +}); + +export const setRedirectUri = (uri) => ({ + type: actions.SET_REDIRECT_URI, + uri, +}); diff --git a/client/coral-framework/constants/auth.js b/client/coral-framework/constants/auth.js index a9ac52739..57bde6f3f 100644 --- a/client/coral-framework/constants/auth.js +++ b/client/coral-framework/constants/auth.js @@ -47,5 +47,7 @@ export const VERIFY_EMAIL_SUCCESS = 'VERIFY_EMAIL_SUCCESS'; export const VERIFY_EMAIL_FAILURE = 'VERIFY_EMAIL_FAILURE'; export const UPDATE_USERNAME = 'UPDATE_USERNAME'; +// Login Popup actions. export const SET_REQUIRE_EMAIL_VERIFICATION = 'SET_REQUIRE_EMAIL_VERIFICATION'; +export const SET_REDIRECT_URI = 'SET_REDIRECT_URI'; diff --git a/client/coral-framework/reducers/auth.js b/client/coral-framework/reducers/auth.js index 7a1744d59..5a05de28e 100644 --- a/client/coral-framework/reducers/auth.js +++ b/client/coral-framework/reducers/auth.js @@ -1,5 +1,6 @@ import {Map, fromJS} from 'immutable'; import * as actions from '../constants/auth'; +import {pym} from 'coral-framework'; const initialState = Map({ isLoading: false, @@ -18,6 +19,7 @@ const initialState = Map({ successSignUp: false, fromSignUp: false, requireEmailConfirmation: false, + redirectUri: pym.parentUrl || location.href, }); const purge = (user) => { @@ -146,6 +148,9 @@ export default function auth (state = initialState, action) { case actions.SET_REQUIRE_EMAIL_VERIFICATION: return state .set('requireEmailConfirmation', action.required); + case actions.SET_REDIRECT_URI: + return state + .set('redirectUri', action.uri); default : return state; } diff --git a/plugins/coral-plugin-auth/client/components/SignInContainer.js b/plugins/coral-plugin-auth/client/components/SignInContainer.js index 9ef868f1d..bfa8e97b9 100644 --- a/plugins/coral-plugin-auth/client/components/SignInContainer.js +++ b/plugins/coral-plugin-auth/client/components/SignInContainer.js @@ -1,6 +1,5 @@ import React from 'react'; import {connect} from 'react-redux'; -import {pym} from 'coral-framework'; import SignDialog from './SignDialog'; import {bindActionCreators} from 'redux'; import translations from '../translations'; @@ -99,7 +98,6 @@ class SignInContainer extends React.Component { this.props .requestConfirmEmail( this.state.emailToBeResent, - pym.parentUrl || location.href ) .then(() => { setTimeout(() => { @@ -154,7 +152,7 @@ class SignInContainer extends React.Component { const {fetchSignUp, validForm, invalidForm} = this.props; this.displayErrors(); if (this.isCompleted() && !Object.keys(errors).length) { - fetchSignUp(this.state.formData, pym.parentUrl || location.href); + fetchSignUp(this.state.formData); validForm(); } else { invalidForm(lang.t('signIn.checkTheForm'));