首页 > 解决方案 > LoopbackJS 获取经过身份验证的 UserId 以存储在模型中,而不通过 API 公开它

问题描述

我在 Loopback 中有以下“内容”模型,需要经过身份验证的用户才能访问。每条内容只能由一个用户创建。(用户继承自 Loopback 内部用户模型)因此,在创建内容时,我希望将 UserId 存储在内容记录中。但是,我希望这发生在幕后,而不必通过 API 传递 userId。我玩过关系,但这似乎没有奏效..

{
  "name": "Content",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "BooId": {
      "type": "string",
      "required": true
    },
    "Name": {
      "type": "string",
      "required": true
    },
    "Language": {
      "type": "string",
      "required": true,
      "default": "en-gb"
    },
    "Version": {
      "type": "number",
      "default": 1
    },
    "Text": {
      "type": "string",
      "required": true
    },
    "Created": {
      "type": "date",
      "defaultFn": "now"
    },
    "Tags": {
      "type": [
        "string"
      ],
      "default": []
    }
  },
  "validations": [],
  "relations": [],
  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$unauthenticated",
      "permission": "DENY"
    }
  ],
  "methods": {}
}

标签: javascriptnode.jsauthenticationloopbackjs

解决方案


首先,我将为内容创建一个新关系。所以我会将关系添加到您的内容模型中:

"relations": {
  "author": {
    "type": "belongsTo",
    "model": "user", // <-- your user model name
    "foreignKey": ""
  }
}

然后,您可以使用before save钩子userId在您的内容模型上设置。

或者,你可以简单地下载这个 mixin 来为你做。

https://github.com/akkonrad/loopback-author-mixin


推荐阅读