gpt4 book ai didi

node.js - 由于 Node.js 和 Angular 运行在不同的本地主机上,如何在 Angular 中使用 Nodemailer 电子邮件验证的路由?

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:22 25 4
gpt4 key购买 nike

我正在尝试发送一封验证电子邮件,让用户确认他们的电子邮件。通过后端和nodemailer,用户现在收到电子邮件。但是当您单击电子邮件内的链接时,它会显示错误。这是因为前端是 Angular 并在 localhost:4200 上运行,而 Node.js 在 localhost:30000 上运行。这是代码:

 const body = {
username: Helpers.firstUpper(value.username),
email: Helpers.lowerCase(value.email),
password: hash,
};
User.create(body)
.then(user => {
const token = jwt.sign({ data: user }, dbConfig.secret, {
expiresIn: '5h'
});
res.cookie('auth', token);
res
.status(HttpStatus.CREATED)
.json({ message: 'User created successfully', user, token });
var emailtoken = new emailToken({ _userId: user._id, emailtoken: crypto.randomBytes(16).toString('hex') });
emailtoken.save(function (err) {
if (err) { return res.status(500).send({ msg: err.message }); }
var transporter = nodemailer.createTransport({
service: 'Sendgrid',
auth: { api_key:'api key is here' }
});
var mailOptions = {
from: 'email@email.com',
to: user.email, subject: 'Account Verification Token',
text: 'Hello,\n\n' + 'Please verify your account by clicking the link: \nhttp:\/\/' + req.headers.host + '\/confirmation\/' + emailtoken.emailtoken
}

transporter.sendMail(mailOptions, function (err) {
})
})
})
.catch(err => {
res
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.json({ message: 'Error occured' });
});
});
},

我在其他问题的答案中发现了类似的内容:

res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200'); // Change this to your Angular 2 port number
res.setHeader('Access-Control-Request-Method', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Headers', '*');

我应该在哪里实现这段代码?另外,我应该在 Angular 部分添加什么才能使电子邮件内的确认链接按预期工作?

最佳答案

我认为最好的方法是将“FRONTEND_URI”存储为配置/环境。

另一种方式,将遵循此 answer

但是,我认为可能更合适的解决方案是将场景替换为如下:

单击链接后,应向您的后端发送请求,在其中激活您的电子邮件,然后将用户重定向到前端 URL(例如存储在配置/环境中)。

这样, Angular 组件(您将重定向到的)将显示一个静态页面,仅指示验证是否成功,否则指示任何错误。

关于node.js - 由于 Node.js 和 Angular 运行在不同的本地主机上,如何在 Angular 中使用 Nodemailer 电子邮件验证的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53800996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com