diff --git a/core/server/api/canary/settings.js b/core/server/api/canary/settings.js index 67473208f3..77eb21a7ac 100644 --- a/core/server/api/canary/settings.js +++ b/core/server/api/canary/settings.js @@ -97,7 +97,7 @@ module.exports = { frame.response = async function (req, res) { try { const {token, action} = frame.options; - const updatedEmailAddress = membersService.settings.getEmailFromToken({token}); + const updatedEmailAddress = await membersService.settings.getEmailFromToken({token}); const actionToKeyMapping = { fromAddressUpdate: 'members_from_address', supportAddressUpdate: 'members_support_address' diff --git a/core/server/services/members/settings.js b/core/server/services/members/settings.js index e2b3d9c7dc..21f0c7fda9 100644 --- a/core/server/services/members/settings.js +++ b/core/server/services/members/settings.js @@ -6,6 +6,9 @@ const settingsCache = require('../settings/cache'); const logging = require('../../../shared/logging'); const mail = require('../mail'); const updateEmailTemplate = require('./emails/updateEmail'); +const SingleUseTokenProvider = require('./SingleUseTokenProvider'); +const models = require('../../models'); +const MAGIC_LINK_TOKEN_VALIDITY = 4 * 60 * 60 * 1000; const ghostMailer = new mail.GhostMailer(); @@ -63,14 +66,14 @@ function createSettingsInstance(config) { const magicLinkService = new MagicLink({ transporter, - secret: config.getAuthSecret(), + tokenProvider: new SingleUseTokenProvider(models.SingleUseToken, MAGIC_LINK_TOKEN_VALIDITY), getSigninURL, getText, getHTML, getSubject }); - const sendEmailAddressUpdateMagicLink = ({email, payload = {}, type = 'fromAddressUpdate'}) => { + const sendEmailAddressUpdateMagicLink = ({email, type = 'fromAddressUpdate'}) => { const [,toDomain] = email.split('@'); let fromEmail = `noreply@${toDomain}`; if (fromEmail === email) { @@ -90,11 +93,12 @@ function createSettingsInstance(config) { return ghostMailer.send(msg); } }; - return magicLinkService.sendMagicLink({email, payload, subject: email, type}); + return magicLinkService.sendMagicLink({email, tokenData: {email}, subject: email, type}); }; - const getEmailFromToken = ({token}) => { - return magicLinkService.getUserFromToken(token); + const getEmailFromToken = async ({token}) => { + const data = await magicLinkService.getDataFromToken(token); + return data.email; }; const getAdminRedirectLink = ({type}) => { diff --git a/package.json b/package.json index 58f81c5ee4..a6030e8808 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghost", - "version": "3.34.0", + "version": "3.34.1", "description": "The professional publishing platform", "author": "Ghost Foundation", "homepage": "https://ghost.org",