【发布时间】:2018-01-07 07:59:31
【问题描述】:
我们的登录模型只要求用户输入用户名和密码,电子邮件是可选的,但是回送用户模型需要电子邮件才能创建新用户。
有没有办法在 Strongloop 中创建一个新用户而无需输入电子邮件?
【问题讨论】:
标签: node.js login loopbackjs strongloop
我们的登录模型只要求用户输入用户名和密码,电子邮件是可选的,但是回送用户模型需要电子邮件才能创建新用户。
有没有办法在 Strongloop 中创建一个新用户而无需输入电子邮件?
【问题讨论】:
标签: node.js login loopbackjs strongloop
目前,不允许非唯一用户电子邮件。一 原因是 User.login 同时支持电子邮件和用户名, 即您可以通过输入电子邮件和密码登录。
请参阅this link。
但别担心,有一个丑陋的(或者可能是创造性的)方法来解决这个问题:
1.从common/models/base-user.json中的用户模型扩展:
{
"name": "baseUser",
"base": "User",
"idInjection": true,
"hidden":["email"],
"properties": {
"username": {
"type": "string",
"required": true,
"index": {
"unique": true
}
}
}
}
2.在common/models/base-user.js注册之前为每个用户创建随机电子邮件:
module.exports = function (BaseUser) {
BaseUser.beforeRemote('create', function (context, user, next) {
var req = context.req;
req.body.email =Date.now()+"a@b.cc";
next();
});
};
3.定义baseUser模型并隐藏server/config-model.json中的User模型
"baseUser": {
"dataSource": "MongoDB",
"public": true
},
"User": {
"dataSource": "MongoDB",
"public": false
}
【讨论】:
根据文档,目前没有办法更改内置模型的所需属性:
https://docs.strongloop.com/display/public/LB/Customizing+models
【讨论】:
@viam had the right idea,但由于 API 随时间发生变化,该答案的代码已被最新的 Loopback(^3.17 或 ^4)弃用。
Specifically deprecated:BaseUser.beforeRemote('create',...
这里是更新的基本用户,假设是 Loopback 3,基于在 Ella API 中找到的更完整的实现:
module.exports = function (Ellauser) {
Ellauser.observe('before save', function filterProperties(ctx, next) {
let oInstance = ctx.instance;
if (oInstance) oInstance.email = oInstance.email || 'placeholder@example.com';
next();
});
};
【讨论】: