diff --git a/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.css b/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.css
index f191a3167..bd0b65368 100644
--- a/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.css
+++ b/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.css
@@ -36,17 +36,32 @@
}
.button {
- color: #787D80;
+ background-color: #3498db;
border-radius: 2px;
- background-color: transparent;
- height: 30px;
- font-size: 0.9em;
- width: 100%;
- display: inline-block;
- text-align: center;
- font-size: 1em;
- background-color: #3498DB;
+ border: 0;
color: white;
+ display: inline-block;
+ font-size: 1em;
+ height: 30px;
+ text-align: center;
+ width: 100%;
+
+ &:hover {
+ cursor: pointer;
+ }
+}
+
+.cancel {
+ background-color: #e0e0e0;
+ border-radius: 2px;
+ border: 0;
+ color: #4f5c67;
+ display: inline-block;
+ font-size: 1em;
+ height: 30px;
+ margin-top: 5px;
+ text-align: center;
+ width: 100%;
&:hover {
cursor: pointer;
diff --git a/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.js b/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.js
index fe260d782..ad72c5901 100644
--- a/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.js
+++ b/plugins/talk-plugin-local-auth/client/components/AddEmailAddress/AddEmailForm.js
@@ -14,10 +14,10 @@ import {
} from 'coral-framework/lib/validation';
import { Form, Field } from 'react-final-form';
-const AddEmailContent = ({ onSubmit }) => (
+const AddEmailContent = ({ onSubmit, onCancel }) => (
- {t('talk-plugin-local-auth.add_email.content.title')}
+ {t('talk-plugin-local-auth.add_email.title')}
{t('talk-plugin-local-auth.add_email.content.description')}
@@ -113,6 +113,14 @@ const AddEmailContent = ({ onSubmit }) => (
+
)}
@@ -122,6 +130,7 @@ const AddEmailContent = ({ onSubmit }) => (
AddEmailContent.propTypes = {
onSubmit: PropTypes.func.isRequired,
+ onCancel: PropTypes.func.isRequired,
};
export default AddEmailContent;
diff --git a/plugins/talk-plugin-local-auth/client/containers/AddEmailAddressDialog.js b/plugins/talk-plugin-local-auth/client/containers/AddEmailAddressDialog.js
index dbf75f246..8dda499c6 100644
--- a/plugins/talk-plugin-local-auth/client/containers/AddEmailAddressDialog.js
+++ b/plugins/talk-plugin-local-auth/client/containers/AddEmailAddressDialog.js
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
import { compose, gql } from 'react-apollo';
import { bindActionCreators } from 'redux';
import { connect, withFragments, excludeIf } from 'plugin-api/beta/client/hocs';
+import { logout } from 'plugin-api/beta/client/actions/auth';
import { notify } from 'coral-framework/actions/notification';
import { withAttachLocalAuth } from '../hocs';
import { startAttach, finishAttach } from '../actions';
@@ -58,6 +59,10 @@ class AddEmailAddressDialog extends React.Component {
}
};
+ handleOnCancel = async () => {
+ this.props.logout();
+ };
+
goToNextStep = () => {
this.setState(({ step }) => ({
step: step + 1,
@@ -79,7 +84,12 @@ class AddEmailAddressDialog extends React.Component {
id="talk-plugin-local-auth-email-dialog"
className={styles.dialog}
>
- {step === 0 && }
+ {step === 0 && (
+
+ )}
{step === 1 &&
!requireEmailConfirmation && (
@@ -98,6 +108,7 @@ AddEmailAddressDialog.propTypes = {
notify: PropTypes.func.isRequired,
startAttach: PropTypes.func.isRequired,
finishAttach: PropTypes.func.isRequired,
+ logout: PropTypes.func.isRequired,
root: PropTypes.object,
};
@@ -106,7 +117,7 @@ const mapStateToProps = ({ talkPluginLocalAuth: state }) => ({
});
const mapDispatchToProps = dispatch =>
- bindActionCreators({ notify, startAttach, finishAttach }, dispatch);
+ bindActionCreators({ notify, startAttach, finishAttach, logout }, dispatch);
const withData = withFragments({
root: gql`
diff --git a/plugins/talk-plugin-local-auth/server/errors.js b/plugins/talk-plugin-local-auth/server/errors.js
index 0f0653c19..a5a3aed1b 100644
--- a/plugins/talk-plugin-local-auth/server/errors.js
+++ b/plugins/talk-plugin-local-auth/server/errors.js
@@ -32,4 +32,18 @@ class ErrIncorrectPassword extends TalkError {
}
}
-module.exports = { ErrLocalProfile, ErrNoLocalProfile, ErrIncorrectPassword };
+class ErrDuplicateLocalProfile extends TalkError {
+ constructor() {
+ super('Duplicate local profile attachment', {
+ translation_key: 'DUPLICATE_LOCAL_PROFILE',
+ status: 400,
+ });
+ }
+}
+
+module.exports = {
+ ErrDuplicateLocalProfile,
+ ErrLocalProfile,
+ ErrNoLocalProfile,
+ ErrIncorrectPassword,
+};
diff --git a/plugins/talk-plugin-local-auth/server/mutators.js b/plugins/talk-plugin-local-auth/server/mutators.js
index 76eb227fc..440f12ee3 100644
--- a/plugins/talk-plugin-local-auth/server/mutators.js
+++ b/plugins/talk-plugin-local-auth/server/mutators.js
@@ -3,6 +3,7 @@ const {
ErrNoLocalProfile,
ErrLocalProfile,
ErrIncorrectPassword,
+ ErrDuplicateLocalProfile,
} = require('./errors');
const { get } = require('lodash');
@@ -115,6 +116,11 @@ async function attachUserLocalAuth(ctx, email, password) {
// Validate the password.
await Users.isValidPassword(password);
+ // See if this email address already has a local profile setup.
+ if (await Users.findLocalUser(email)) {
+ throw new ErrDuplicateLocalProfile();
+ }
+
// Hash the new password.
const hashedPassword = await Users.hashPassword(password);
@@ -160,7 +166,7 @@ async function attachUserLocalAuth(ctx, email, password) {
await Users.sendEmailConfirmation(updatedUser, email, redirectUri);
} catch (err) {
if (err.code === 11000) {
- throw new ErrEmailTaken();
+ throw new ErrDuplicateLocalProfile();
}
throw err;
}
diff --git a/plugins/talk-plugin-local-auth/translations.yml b/plugins/talk-plugin-local-auth/translations.yml
index 5364f8718..0d5b5c4e1 100644
--- a/plugins/talk-plugin-local-auth/translations.yml
+++ b/plugins/talk-plugin-local-auth/translations.yml
@@ -59,7 +59,6 @@ ar:
required_field: "هذه الخانة مطلوبه"
done: "تم"
content:
- title: "أضف عنوان بريد إلكتروني"
description: "لمزيد من الأمان ، نطلب من المستخدمين إضافة عنوان بريد إلكتروني إلى حساباتهم. سيتم استخدام عنوان بريدك الإلكتروني في:"
item_1: "تلقي التحديثات المتعلقة بأي تغييرات في حسابك (عنوان البريد الإلكتروني ، اسم المستخدم ، كلمة المرور ، إلخ.)"
item_2: "السماح لك بتنزيل تعليقاتك."
@@ -83,6 +82,7 @@ en:
NO_LOCAL_PROFILE: No existing email address is associated with this account.
LOCAL_PROFILE: An email address is already associated with this account.
INCORRECT_PASSWORD: Provided password was incorrect.
+ DUPLICATE_LOCAL_PROFILE: An account already exists with this email address. Please cancel and login with your email address and password.
talk-plugin-local-auth:
change_password:
change_password: "Change Password"
@@ -125,7 +125,9 @@ en:
cancel: "Cancel"
change_email_msg: "Email Address Changed. This email address will now be used for signing in and email notifications."
add_email:
+ title: "Create New Account"
add_email_address: "Add Email Address"
+ cancel: "Cancel"
enter_email_address: "Enter Email Address:"
invalid_email_address: "Invalid Email address"
confirm_email_address: "Confirm Email Address:"
@@ -135,7 +137,6 @@ en:
required_field: "This field is required"
done: "Done"
content:
- title: "Add an Email Address"
description: "For your added security, we require users to add an email address to their accounts. Your email address will be used to:"
item_1: "Receive updates regarding any changes to your account (email address, username, password, etc.)"
item_2: "Allow you to download your comments."
@@ -211,7 +212,6 @@ sr:
required_field: "Ovo polje je obavezno"
done: "Gotovo"
content:
- title: "Dodaj e-mail adresu"
description: "For your added security, we require users to add an email address to their accounts. Your email address will be used to:"
item_1: "Receive updates regarding any changes to your account (email address, username, password, etc.)"
item_2: "Omogućuje vam da preuzmete (download) svoje komentare."
@@ -225,7 +225,7 @@ sr:
subtitle: "Želite da promenite e-mail adresu?"
description_2: "Možete urediti svoj nalog ovde:"
path: "Moj profil > Podešavanja"
- alert: "E-mail dodat"
+ alert: "E-mail dodat"
pt_BR:
email:
email_change_original:
@@ -287,7 +287,6 @@ pt_BR:
required_field: "Esse campo é obrigatório"
done: "Feito"
content:
- title: "Adicione um endereço de email"
description: "Para a sua segurança, exigimos que os usuários adicionem um endereço de email para suas contas. Seu email será usado para:"
item_1: "Receba avisos de alterações na sua conta(endereço de email, usuário, senha, etc.)"
item_2: "Permitir que você baixe seus comentários."
@@ -362,7 +361,6 @@ de:
required_field: "Dieses Feld ist erforderlich"
done: "Fertig"
content:
- title: "E-Mail-Adresse hinzufügen"
description: "Aus Sicherheitsgründen benötigen wir eine E-Mail-Adresse zu jedem Benutzerkonto. Ihre E-Mail-Adresse wird für folgendes verwendet:"
item_1: "Benachrichtigungen über Änderungen am Benutzerkonto (Nutzername, E-Mail-Adresse, Passwort)"
item_2: "Ermöglicht den Download des eigenen Kommentar-Archivs"
@@ -437,7 +435,6 @@ es:
required_field: "Este campo es requerido"
done: "Hecho"
content:
- title: "Agregar una dirección de correo electrónico"
description: "Para su seguridad adicional, solicitamos a los usuarios que agreguen una dirección de correo electrónico a sus cuentas. Su dirección de correo electrónico se usará para:"
item_1: "Recibe actualizaciones sobre cualquier cambio en tu cuenta (dirección de correo electrónico, nombre de usuario, contraseña, etc.)"
item_2: "Permitir que descargues tus comentarios."
@@ -513,7 +510,6 @@ it:
required_field: "Questo campo è obbligatorio"
done: "Finito"
content:
- title: "Aggiungi indirizzo email"
description: "Per questioni di sicurezza, richiediamo agli utenti di aggiungere un indirizzo email associato ai loro account. Il tuo indirizzo email sarà usato per:"
item_1: "Ricevere aggiornamenti riguardo modifiche relative al tuo account (indirizzo email, username, password, etc.)"
item_2: "Permetterti di scaricare i tuoi commenti."
@@ -589,7 +585,6 @@ nl_NL:
required_field: "Dit veld is verplicht"
done: "Klaar"
content:
- title: "Voeg een e-mailadres toe"
description: "Voor je veiligheid vragen we gebruikers om een e-mailadres toe te voegen aan hun account. Je e-mailadres zal worden gebruikt om:"
item_1: "Updates te ontvangen omtrent wijzigingen in je account (e-mailadres, gebruikersnaam, wachtwoord, etc.)"
item_2: "Je reacties te kunnen downloaden."