Node.js学习:使用loopback做邮箱验证

注册用户

LoopBack用户模型提供了注册新用户并确认其电子邮件地址的方法。您还可以使用loopback-component-passport模块将登录信息与Facebook,Google和其他第三方提供商集成。

使用LoopBack用户模型注册用户

创建新用户

a. 通过添加模型实例创建用户(注册用户),电子邮件和密码是唯一必需的属性。

/server/boot/my-boot-script.js

module.exports = function(app) {
  var User = app.models.User;
  User.create({email: '[email protected]', password: 'bar'}, function(err, userInstance) {
    console.log(userInstance);
  });
  //...

注:如果/boot文件夹中没有这个js文件,可以自己新建一个my-boot-script.js。这个文件夹中脚本的作用是执行一些初始化的设置。默认情况下,运行引导脚本后,应用程序在启动时会自动执行该文件夹中的脚本。

b. 使用POST /users接口创建一个新的用户实例,例如:

curl -X POST -H "Content-Type:application/json"         \
-d '{"email": "[email protected]", "password": "secret"}'   \
http://localhost:3000/api/users

添加其他注册限制

我们可能会在注册过程中添加方法,比如查看给定的用户名是否可用,或者是否已经注册了一个电子邮件地址。通常做法是在User对象上添加一个beforeRemote方法。

验证电子邮件地址

通常,应用程序将要求用户在登录之前验证其电子邮件地址。所以我们需要向用户发送一封包含链接的电子邮件,来验证其地址。一旦用户点击链接,他们就会被重定向到网站的登录页面(“/”),并且将能够正常登录。

如果需要强制验证注册,请在server/model-config.json中将emailVerificationRequired用户模型属性设置为true;

server/model-config.json

...
"user": {
    "dataSource": "db",
    "public": true,
    "options": {
      "emailVerificationRequired": true
    }
...

通过REST,使用GET /users/confirm接口来验证用户的电子邮件地址。

此示例在User模型上创建了一个远程钩子,并在create()方法被调用之后执行。

/common/models/user.js

var config = require('../../server/config.json');
var path = require('path');

module.exports = function(user) {
  //send verification email after registration
  user.afterRemote('create', function(context, userInstance, next) {
    console.log('> user.afterRemote triggered');

    var options = {
      type: 'email',
      to: userInstance.email,
      from: '[email protected]',
      subject: 'Thanks for registering.',
      template: path.resolve(__dirname, '../../server/views/verify.ejs'),
      redirect: '/verified',
      user: user
    };

    userInstance.verify(options, function(err, response, next) {
      if (err) return next(err);

      console.log('> verification email sent:', response);

      context.res.render('response', {
        title: 'Signed up successfully',
        content: 'Please check your email and click on the verification link ' -
            'before logging in.',
        redirectTo: '/',
        redirectToLinkText: 'Log in'
      });
    });
  });
...

有关完整的示例,请参阅loopback-example-user-management中的user.js。

接下来,我们将以loopback-example-user-management为例,详细地完成验证邮箱的过程。

首先需要在/server/model-config.json里配置邮件数据源。

/server/model-config.json

···
"Role": {
  "dataSource": "db",
  "public": false
},
"Email": {
  "dataSource": "emailDs"
},
"user": {
  "dataSource": "db",
  "public": true,
  "options": {}
}
···

接下来配置/server/datasources.json文件,即配置邮件数据源,示例项目中的代码如下:

"emailDs": {
  "name": "emailDs",
  "connector": "mail",
  "transports": [
    {
      "type": "smtp",
      "host": "smtp.gmail.com",
      "secure": true,
      "port": 465,
      "tls": {
        "rejectUnauthorized": false
      },
      "auth": {
        "user": "[email protected]",
        "pass": "password"
      }
    }
  ]
}

这里需要改两个地方,一个是host要改成你指定的源地址,如果是gmail邮箱,就写成smtp.gmail.com,如果是qq邮箱,就改成smtp.qq.com。另外一个改动是auth中的user和pass,这里写的是用于发送邮件的邮箱的邮箱名和密码,也就是设置用这个邮箱给注册的用户邮箱发送邮件。

现在运行项目,打开http://localhost:3000/explorer,我们现在在API explorer中注册一个用户。

Node.js学习:使用loopback做邮箱验证_第1张图片
Node.js学习:使用loopback做邮箱验证_第2张图片

它将返回一个提示网页,这表示验证邮件已经成功发到了注册的邮箱中。

打开邮箱,激活链接,再次登录即可成功。

Node.js学习:使用loopback做邮箱验证_第3张图片

现在回到explorer,使用登录接口。

Node.js学习:使用loopback做邮箱验证_第4张图片
Node.js学习:使用loopback做邮箱验证_第5张图片

返回的参数中,id为返回的token,ttl为token默认的有效周期,可以手动修改。

你可能感兴趣的:(Node.js学习:使用loopback做邮箱验证)