使用环回3.x和默认用户模型发送电子邮件

时间:2019-03-18 21:43:47

标签: node.js loopbackjs strongloop

我正在尝试为默认环回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/中看到它。.所以我有userUser模型。

我还在/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函数来发送该重置密码电子邮件,这实在令人沮丧! >

有什么想法如何为该默认用户正确设置它? 顺便说一句,我试图从两个模型Useruser发送通过请求,但它们都没有起作用。...

//更新

我追踪到,当我通过电子邮件发送请求时(例如,使用邮递员),默认情况下的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,我想它有一些到期时间。

0 个答案:

没有答案