我使用 MeteorJS 无密码身份验证、Cloudflare 用于 DNS、Mailgun 作为电子邮件服务器、Nodechef 用于应用程序托管:https://docs.meteor.com/packages/accounts-passwordless
每当用户提交电子邮件以在电子邮件收件箱中接收用于登录网站的链接时,该链接都会指向 NodeChef 服务器而不是域(即 https://example1-12820.nodechef.com 而不是 https://example.com)。每当用户通过此链接登录时,URL 也是 NodeChef 服务器。我希望域名同时出现在链接和 URL 中,主要是为了虚荣的目的。
对于以下内容,假设正确的域应该是 example.com:
//body.js
import './body.html';
import { Meteor } from 'meteor/meteor';
import { Template } from 'meteor/templating';
import { Accounts } from 'meteor/accounts-base';
Template.App_body.events({
'submit #login-form'(event) {
event.preventDefault();
const email = event.target.email.value;
if (email == "") {
FlashMessages.sendError("Must enter email to receive link");
} else {
Accounts.requestLoginTokenForUser({
selector: email.toLowerCase().trim(),
userData: { email: email.toLowerCase().trim() }}, function (error) {
if (error) {
FlashMessages.sendError(error);
} else {
FlashMessages.sendSuccess("Check email for login link");
}
});
}
},
});
//fixtures.js
import { Meteor } from 'meteor/meteor';
import { Accounts } from 'meteor/accounts-base';
Meteor.startup(() => {
process.env.MAIL_URL = Meteor.settings.MAIL_URL;
Accounts.emailTemplates.siteName = 'Example';
Accounts.emailTemplates.from = 'Example Admin <[email protected]>';
Accounts.emailTemplates.sendLoginToken = {
subject() {
return "Login to Example";
},
text(user, url) {
return `Hi there! Login to Example by following this link: ${url}`;
}
};
});
//settings.json
{
"MAIL_URL": "smtp://[email protected]:[email protected]:587"
}
以下是相关 Cloudflare DNS 记录的类型、键和值:
CNAME email.mg mailgun.org
CNAME example.com example1-12820.nodechef.com
MX mg mxa.mailgun.org
MX mg mxb.mailgun.org
TXT mg v=spf1 include:mailgun.org ~all
还有其他记录,但好像没有关联。
我尝试更改 CNAME 和 MX 记录,并检查 Mailgun、Cloudflare 和 NodeChef 中是否存在可以更改登录链接中发送的 URL 的设置,但无济于事
更新 Nodechef 环境设置中的 ROOT_URL 解决了这个问题