Registering users(用户注册)

Loopback 的内置User Model,提供了注册,确认 Email 地址.
同时通过 loopback-component-passport 模块能够整合 google, Facebook ,github 等第三方登录.

  • 通过内置 User Model 注册用户
    • 创建一个新用户
    • 添加注册限制
    • 验证 email 地址
  • 使用第三方注册

创建一个新用户

创建一个用户(注册的使用者)通过添加模型实例,以同样的方式作为任何其他模式;
电子邮件地址和密码是唯一需要的属性。

可以通过 boot script 注册默认用户

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

可以通过, POST 方式创建一个新用户

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

可以通过 explorer

通过 explorer 提供的图形管理工具添加用户

添加注册限制

通常情况需要在注册过程中添加自己的逻辑,比如 检测 用户名, email 是否重复.
一个好方法是添加方法为 beforeRemote 用户对象上的钩子.

验证 email 地址

通常情况,应用需要在用户登录之前,先认证邮箱.
应用将发送一封电子邮件包含的链接以验证其地址的用户身份, 一旦用户点击链接之后,通过认证.

如何启用这以限制?
需要在 User 的 配置信息中将 options.emailVerificationRequired 属性设置为 true.

在下面的案例中, 添加的 user.afterRemote('create', function) 添加发送方法

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

module.exports = function(user) {
  // 在用户成功完成注册的方法后, 发送邮件
  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: '注册成功',
        content: '请先完成邮箱认证再登陆',
        redirectTo: '/',
        redirectToLinkText: 'Log in'
      });
    });
  });

提供 verify.ejs 文件,案例为

This is the html version of your email.
<strong><%= text %></strong>

使用第三方注册

使用 loopback-component-passport 组件, 详细查看 Third-party login using Passport

results matching ""

    No results matching ""