Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/controllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Controllers.editStrategy = async (req, res) => {

payload.enabled = !!req.body.enabled;

const checkboxes = ['forceUsernameViaEmail', 'usernameViaEmail', 'trustEmailVerified', 'syncFullname', 'syncPicture'];
const checkboxes = ['forceUsernameViaEmail', 'usernameViaEmail', 'trustEmailVerified', 'disableEmailFallback', 'syncFullname', 'syncPicture'];
checkboxes.forEach((prop) => {
payload[prop] = payload.hasOwnProperty(prop) && payload[prop] === 'on' ? 1 : 0;
});
Expand Down
10 changes: 7 additions & 3 deletions library.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,15 @@ OAuth.login = async (payload) => {
return ({ uid });
}

const { trustEmailVerified } = await OAuth.getStrategy(payload.name);
const { trustEmailVerified, disableEmailFallback } = await OAuth.getStrategy(payload.name);
const { email } = payload;
const email_verified =
parseInt(trustEmailVerified, 10) &&
(payload.email_verified || payload.email_verified === true);


// Check for user via email fallback
if (email && email_verified) {
if (email && email_verified && !parseInt(disableEmailFallback, 10)) {
uid = await user.getUidByEmail(payload.email);
}

Expand All @@ -241,7 +241,11 @@ OAuth.login = async (payload) => {
await user.setUserField(uid, 'email', email);

if (email_verified) {
await user.email.confirmByUid(uid);
try {
await user.email.confirmByUid(uid);
} catch (err) {
winston.warn(`[plugin/sso-oauth2-multiple] Could not confirm ${email} for uid ${uid}: ${err.message}`);
}
}
}
}
Expand Down
11 changes: 11 additions & 0 deletions static/templates/partials/edit-oauth2-strategy.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,17 @@
<label for="trustEmailVerified" class="form-check-label">Automatically confirm emails when <code>email_verified</code> is true.</code></label>
</div>

<div class="form-check form-switch mb-3">
<input type="checkbox" class="form-check-input" id="disableEmailFallback" name="disableEmailFallback" {{{ if (./disableEmailFallback == "1") }}}checked{{{ end }}}>
<label for="disableEmailFallback" class="form-check-label">
Never attach this provider to an existing account that shares its email address
<p class="form-text">
A verified address is normally matched against existing users, so signing in with a
second provider joins the account already using that address.
</p>
</label>
</div>

<div class="mb-3">
<label class="form-label" for="idKey">Alternative <code>id</code> key</label>
<input type="text" id="idKey" name="idKey" title="Alternative id key" class="form-control" placeholder="e.g. auth0Id" value="{./idKey}">
Expand Down