我正在尝试为默认环回User
模型发送重置密码电子邮件,但是它根本无法正常工作。我已经尝试并阅读了所有可能找到的示例,但没有一个起作用。
我尝试关注official documentation来建立电子邮件连接器,这是我的datasources.json
"emailDs": {
"name": "emailDs",
"connector": "mail",
"transports": [
{
"type": "smtp",
"host": "smtp.gmail.com",
"secure": true,
"port": 465,
"auth": {
"user": "myemail@gmail.com",
"pass": "password"
}
}
]
}
model-config.json
我有这个
...
"Role": {
"dataSource": "db",
"public": false
},
"Email": {
"dataSource": "emailDs"
},
"user": {
"dataSource": "db",
"public": true,
"options": {}
}
您可能会在此文件中看到,我还创建了一个名为user
的新模型(无大写字母U,扩展了默认的User
模型。我只是从{{ 3}}(向下滚动以重置用户密码)。
我注册了新的user
模型,因此可以在domain.com:3000/explorer/
中看到它。.所以我有user
和User
模型。
我还在/boot/routes.js
中创建了一个文件,并粘贴了上面链接的示例中的所有代码。
现在,既然我已经在datasources.json
中设置了电子邮件数据源,它应该可以工作吗?因为我尝试使用/Users/reset
发布密码重置,该密码仅需要这种形式的电子邮件(可能)
{
"email":"myuseraccount@email.com"
}
是用户的电子邮件,已经注册。只需提一下,我正在从事android应用程序的注册和登录工作正常。因此,我按下了Try it out
按钮来执行重置密码请求,我得到了204 Request was successful
但没有收到电子邮件。甚至节点控制台也不会显示任何错误,只有当我输入电子邮件时才显示此错误,该电子邮件不在注册用户的数据库中。
对于我的gmail电子邮件配置(应向用户发送重置密码的电子邮件),我启用了Gmail帐户中安全性较低的应用程序的访问权限,我还尝试启用两步验证并为该应用程序创建了一个帐户, gmail仅为该应用程序提供了唯一的密码。我已使用此密码并将其放在datasources.json
中,并且从未使用过该密码登录,因此这意味着环回永远不会执行send
函数来发送该重置密码电子邮件,这实在令人沮丧! >
有什么想法如何为该默认用户正确设置它?
顺便说一句,我试图从两个模型User
和user
发送通过请求,但它们都没有起作用。...
//更新
我追踪到,当我通过电子邮件发送请求时(例如,使用邮递员),默认情况下的User.resetPassword = function(options, cb) { .. }
模型User
中的函数user.js
被执行。但是接下来应该做什么?在某个地方调用send email
,但是如何以及在哪里调用呢?我试图理解文档,但是理解起来非常复杂。
//更新2
即使官方文档说不要编辑默认的User
模型,我还是对其进行了编辑。
我添加了发送功能,现在终于可以发送电子邮件了:
//send password reset link when requested
User.on('resetPasswordRequest', function(info) {
var url = 'http://mywebsite.com:3000/api/Users/reset-password';
var html = 'Click <a href="' + url + '?access_token=' +
info.accessToken.id + '">here</a> to reset your password';
User.app.models.Email.send({
to: info.email,
from: null,
subject: 'Password reset',
html: html
}, function(err) {
if (err) return console.log('> error sending password reset email');
console.log('> sending password reset email to:', info.email);
});
});
问题是重置密码不起作用,因为当我收到电子邮件时,我单击URL,而我得到的只是401 Unauthorized access
,过了一会儿,它说Invalid token
,我想它有一些到期时间。