【问题标题】:Create new user on strongloop without inputting email在strongloop上创建新用户而不输入电子邮件
【发布时间】:2018-01-07 07:59:31
【问题描述】:

我们的登录模型只要求用户输入用户名和密码,电子邮件是可选的,但是回送用户模型需要电子邮件才能创建新用户。

有没有办法在 Strongloop 中创建一个新用户而无需输入电子邮件?

【问题讨论】:

标签: node.js login loopbackjs strongloop


【解决方案1】:

目前,不允许非唯一用户电子邮件。一 原因是 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
}

【讨论】:

  • 对我来说,这只能称为创意:)。 OP 表示电子邮件是可选的,因此对于那些实际提供电子邮件地址的人来说,它只是缺少一个额外的字段
  • See my answer 更新
【解决方案2】:

根据文档,目前没有办法更改内置模型的所需属性:

https://docs.strongloop.com/display/public/LB/Customizing+models

【讨论】:

    【解决方案3】:

    @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();
        });
    };
    

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2019-06-26
      相关资源
      最近更新 更多