diff --git a/packages/strapi-admin/admin/src/containers/AdminPage/index.js b/packages/strapi-admin/admin/src/containers/AdminPage/index.js index 3241f0e6a3..9b4e2a7161 100644 --- a/packages/strapi-admin/admin/src/containers/AdminPage/index.js +++ b/packages/strapi-admin/admin/src/containers/AdminPage/index.js @@ -66,10 +66,22 @@ export class AdminPage extends React.Component { // eslint-disable-line react/pr this.props.history.push(`/plugins/users-permissions/auth/${endPoint}`); } - if (!this.isUrlProtected(props) && includes(props.location.pathname, 'register') && this.hasAdminUser(props)) { + if (!this.isUrlProtected(props) && includes(props.location.pathname, 'auth/register') && this.hasAdminUser(props)) { this.props.history.push('/plugins/users-permissions/auth/login'); } + if (!this.isUrlProtected(props) && includes(props.location.pathname, 'auth/login') && !this.hasAdminUser(props)) { + this.props.history.push('/plugins/users-permissions/auth/register'); + } + + if (!this.isUrlProtected(props) && includes(props.location.pathname, 'auth/forgot-password') && !this.hasAdminUser(props)) { + this.props.history.push('/plugins/users-permissions/auth/register'); + } + + if (!this.isUrlProtected(props) && includes(props.location.pathname, 'auth/reset-password') && !this.hasAdminUser(props)) { + this.props.history.push('/plugins/users-permissions/auth/register'); + } + if (!props.hasUserPlugin || auth.getToken() && !this.state.hasAlreadyRegistereOtherPlugins) { map(omit(this.props.plugins.toJS(), ['users-permissions', 'email']), plugin => { switch (true) { diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/actions.js index 528c5e0cec..585317c688 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/actions.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/actions.js @@ -77,9 +77,10 @@ export function setForm(formType, email) { }; } -export function submit() { +export function submit(context) { return { type: SUBMIT, + context, }; } diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js index f7d4a5a591..10e9be09a1 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js @@ -85,7 +85,7 @@ export class AuthPage extends React.Component { // eslint-disable-line react/pre this.props.setErrors(formErrors); if (isEmpty(formErrors)) { - this.props.submit(); + this.props.submit(this.context); } } @@ -190,6 +190,10 @@ export class AuthPage extends React.Component { // eslint-disable-line react/pre } } +AuthPage.contextTypes = { + updatePlugin: PropTypes.func, +}; + AuthPage.propTypes = { didCheckErrors: PropTypes.bool.isRequired, formErrors: PropTypes.array.isRequired, diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/saga.js b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/saga.js index 5f6ef64c68..0c876a32aa 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/saga.js +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/saga.js @@ -7,7 +7,7 @@ import { makeSelectFormType, makeSelectModifiedData } from './selectors'; import { submitError, submitSucceeded } from './actions'; import { SUBMIT } from './constants'; -export function* submitForm() { +export function* submitForm(action) { try { const formType = yield select(makeSelectFormType()); const body = yield select(makeSelectModifiedData()); @@ -38,11 +38,15 @@ export function* submitForm() { yield call(auth.setUserInfo, response.user, body.rememberMe); } + if (formType === 'register') { + action.context.updatePlugin('users-permissions', 'hasAdminUser', true); + } + yield put(submitSucceeded()); } catch(error) { const formType = yield select(makeSelectFormType()); - if (isArray(error.response.payload.message)) { + if (isArray(get(error, ['response', 'payload', 'message']))) { const errors = error.response.payload.message.reduce((acc, key) => { const err = key.messages.reduce((acc, key) => {