首页 > 解决方案 > 用户模型在 loopback3 中给出电子邮件验证错误

问题描述

MyUser根据User模型创建了一个模型,如下所示:

{
  "name": "MyUser",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "ownerRelations": true,
  "emailVerificationRequired": true,
  "hidden": [
    "email",
    "emailVerified"
  ],
  "properties": {
    "firstName": {
      "type": "string",
      "required": true
    },
    "lastName": {
      "type": "string",
      "required": true
    },
    "email": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "accessTokens": {
      "type": "hasMany",
      "model": "CustomAccessToken",
      "polymorphic": {
        "foreignKey": "userId",
        "discriminator": "principalType"
      },
      "options": {
        "disableInclude": true
      }
    }
  },
  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW",
      "property": "create"
    }
  ],
  "methods": {}
}

它在我的本地服务器上完美运行。但是当我在 aws 上托管它时ec2,只会创建第一次用户。下次即使我提供不同的电子邮件 ID,我也会收到电子邮件验证错误,如下所示:

The 'MyUser' instance is not valid. Details:电子邮件Email already exists (value: undefined).

现在,如果我删除第一条记录并尝试创建用户,它可以工作。因此,只有第一条记录被插入并为任何唯一的电子邮件发布,我收到验证错误。我不确定为什么会这样。

标签: loopbackjsloopback

解决方案


我能够找出问题所在。我一直email作为一个隐藏的领域。默认情况下, loopback"prohibitHiddenPropertiesInQuery": true不允许在查询中隐藏属性。结果,在用户验证期间,emailloopback-juggler/lib/validation.js. 设置prohibitHiddenPropertiesInQuery为 false 后,它可以工作。

但是,我仍然不确定为什么它在我的本地服务器上以开发模式工作。prohibitHiddenPropertiesInQuery默认情况下为 true,因此它也不应该在开发模式下工作。如果有人对此有任何答案,请告诉我。


推荐阅读