注册用户
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中注册一个用户。
它将返回一个提示网页,这表示验证邮件已经成功发到了注册的邮箱中。
打开邮箱,激活链接,再次登录即可成功。
现在回到explorer,使用登录接口。
返回的参数中,id为返回的token,ttl为token默认的有效周期,可以手动修改。