标签: loopbackjs

loopback在单个请求中保存相关的hasmany模型

我有两个通过hasMany关系相关的模型.

Customer 有很多 CustomerPhones

在创建新内容时Customer,我想将相关内容CustomerPhones作为单个请求的一部分传递.这似乎是一种常见的需求,如果我想要实现的方法是错误的,那么这样做的首选方法是什么?

这是创建客户的URL: POST /api/Customers

上面url的请求将是req.body

{
  "name": "Foo",
  "customerPhones": [
    { "phoneNumber": "8085551234" },
    { "phoneNumber": "8085554567" }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Loopback模型配置:

Customer.json

{
  "name": "Customer",
  "base": "User",
  "properties": {
    "name": {
      "type": "string",
      "required": true
    }
  },
  "relations": {
    "customerPhones": {
      "type": "hasMany",
      "model": "CustomerPhone",
      "foreignKey": ""
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

CustomerPhone.json

{
  "name": "CustomerPhone",
  "base": "PersistedModel",
  "properties": {
    "phoneNumber": {
      "type": "string",
      "required": true
    },
    "customerId": {
      "type": "number",
      "required": true …
Run Code Online (Sandbox Code Playgroud)

strongloop loopbackjs

6
推荐指数
1
解决办法
1380
查看次数

Strongloop Embeds未找到许多辅助方法

有些问题我在文档中找不到答案.

我想要得到这样的结构:

 Node: 
   id: '1sdf12asd123',
   name: 'node1',
   history: 
      [ ts: 234234234234,
        data: { 'foo': 'bar' }
      ],
      ...
Run Code Online (Sandbox Code Playgroud)

所以每个单独的节点都有很多历史项.而且我希望能够在push不覆盖任何内容的情况下获得新数据.

现在,我不希望将所有内容存储在每个节点下,而是存储在单独的文档中,因此我认为embedsMany适合于此:

{
  "name": "Node",
  "plural": "Nodes",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string"
    }
  },
  "validations": [],
  "relations": {
    "history": {
      "type": "embedsMany",
      "model": "History",
      "foreignKey": "HistoryId"
    }
  },
  "acls": [],
  "methods": {}
}
Run Code Online (Sandbox Code Playgroud)

所以历史可以简单地说:

{
  "name": "History",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "ts": {
      "type": "Date"
    },
    "data": { …
Run Code Online (Sandbox Code Playgroud)

javascript node.js strongloop loopbackjs

6
推荐指数
1
解决办法
264
查看次数

在Loopback中设置访问令牌cookie?

我想使用cookie来保持用户登录.

在这个页面在这里,他们说

要使用cookie进行身份验证,请将以下内容添加到server.js(引导前):

app.use(loopback.token({ model: app.models.accessToken }));
Run Code Online (Sandbox Code Playgroud)

看似简单.我认为在登录过程中,Loopback会自动设置cookie,但它仍然无法正常工作,我在Chrome开发工具中检查我的cookie并且没有设置.

我错过了什么吗?否则,什么是挂钩登录方法以设置cookie /标头的最佳方法?

我在这里找到了关于这个loopback.token()方法的文档,它确切地说明了它检查令牌的位置.

node.js express loopbackjs

6
推荐指数
1
解决办法
3016
查看次数

CORS预检错误redux和loopback API

我在react-redux&API app上有一个客户端应用程序loopback.

对于我的本地测试,我在端口8080上运行客户端应用程序,在端口3000上运行服务器应用程序

当我尝试使用loopback-passport component客户端应用测试Google OAuth(使用)时,我收到以下错误.

在此输入图像描述

当我使用POSTMAN测试它时,没有问题.

这是客户端代码,

require('babel-polyfill'); 
import { CALL_API } from 'redux-api-middleware'; 
import C from '../constants';
const API_ROOT = 'http://localhost:3000';
function googleLogin() {   return async(dispatch) => {
    const actionResp = await dispatch({
      [CALL_API]: {
        endpoint: API_ROOT + '/auth/google',
        headers: {
          'Access-Control-Allow-Credentials': 'false',
          'Access-Control-Allow-Methods': 'GET',
          'Access-Control-Allow-Origin': API_ROOT
        },
        method: 'GET',
        types: ['GET', 'GET_SUCCESS', 'GET_FAILED']
      }
    });

    if (actionResp.error) {
      console.log(actionResp);
      throw new Error('Some error in communication', actionResp);
    } else {
      console.log(actionResp);
    } …
Run Code Online (Sandbox Code Playgroud)

javascript cors reactjs loopbackjs redux

6
推荐指数
1
解决办法
994
查看次数

如何配置环回以在标头中使用access_token

我正在使用access_token处理逻辑表单环回.它工作正常,但不幸的是期望URL中的access_token.

我可以配置环回来使用标头自定义字段中的access_token吗?

loopbackjs

6
推荐指数
1
解决办法
2950
查看次数

扩展内置用户模型以支持环回中的更多属性和行为

我想要一个模型来代表我的环回应用程序中的配置文件。但是,loopback 中的内置 User 模型仅具有以下属性

  • 用户名
  • 密码
  • 领域
  • 电子邮件已验证

扩展built-in User model以便插入更多属性(如phone numberprofile picture和 the )的最佳方法是什么likes

javascript model node.js loopbackjs

6
推荐指数
1
解决办法
2164
查看次数

如何在 axios PUT 请求中传递参数?

axios.put('http://localhost:3000/api/userDatas/findUserAddProp',{
    params: {
        userId: "5bb8c3bd16bf1f515ce5b42f",
        prop: "questions",
        questionId: "5bb8c466cb49d8421c05eeda"
    }
});
Run Code Online (Sandbox Code Playgroud)

服务器

Userdatas.findUserAddProp = function(req, res, cb) {
    const queryId = req.query.userId;
    const propToUpdate = req.query.prop;
    const questionId = req.query.questionId;

    console.log("queryId: ", queryId);
    console.log("propToUpdate: ", propToUpdate);
    console.log("questionId: ", questionId);
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是控制台上的服务器输出。

queryId:  undefined
propToUpdate:  undefined
questionId:  undefined
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我刚刚将所有参数传递给服务器?

put loopbackjs axios

6
推荐指数
1
解决办法
2万
查看次数

如何在环回 4 中指定环境变量?

我找到了以前版本的文档https://loopback.io/doc/en/lb3/Environment-specific-configuration.html但我找不到版本 4 的文档

我缺少某些东西或 v4 尚不支持特定于环境的配置?

loopbackjs

6
推荐指数
1
解决办法
3588
查看次数

验证使用 EC512 签名的 Keycloak JWT 时签名无效

我使用 Keycloak 4.8.0 作为身份验证服务器。我已经配置了一个领域,该领域发布使用 EC512 签名的 JWT。我https://example.com/auth/realms/myrealm/protocol/openid-connect/token通过提供用户的客户端 ID、客户端密码、用户名和密码通过端点获取令牌。

当通过 Keycloak 自省 JWT 时,https://example.com/auth/realms/myrealm/protocol/openid-connect/token/introspect它显示为有效。然后我在 LoopBack 4 之上构建了一个 Node.js 应用程序,它提供了一个 REST 服务。在那里我想用passport-jwt. 我提供了公钥,但我总是收到错误TypeError: "ES512" signatures must be "132" bytes, saw "138"。(有趣的是,当使用 Keycloak 4.7.0 时,错误是TypeError: "ES512" signatures must be "132" bytes, saw "139")。

所以签名似乎是无效的。例如,https : //jwt.io能够解码 JWT,但在提供公钥时也不会显示有效签名。公钥可能无效。除了从管理控制台复制密钥之外,我还用来https://example.com/auth/realms/myrealm/protocol/openid-connect/certs检索密钥。然后我在这个答案的帮助下将其转换为 PEM 。键匹配。

所以我在这里有点不知所措。当然,Keycloak 有可能生成无效签名,但我对此表示怀疑。更有可能是我做错了什么,可能是在领域配置上,但我看不到哪里。

对于任何想要尝试验证签名的人来说,这里有一个 JWT 示例,我如上所述获得了它:

eyJhbGciOiJFUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJwdEVYeWpnbGlwdlp3OGRXSUc1Ml8xNFpONTdnWHNtWUdrdUVJSEplSVJrIn0.eyJqdGkiOiJiNmI1NTI4Ni0zY2NiLTRiNzQtYWFlZC1hOGI2MzBiZjQ5NmEiLCJleHAiOjE1NDUwODM0NjYsIm5iZiI6MCwiaWF0IjoxNTQ1MDgzMTY2LCJpc3MiOiJodHRwczovL2F1dGguaW5tYXQubG9jL2F1dGgvcmVhbG1zL2lubWF0IiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjViNWQ5NmI1LTBmZjgtNDAyYi05NDAxLTQyYTExODAzMjFlZiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImlubWF0IiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiZjAxMmIzOTMtYTY0Ny00ZDhkLTk4MDQtZDQ3MzNkM2Y4MjVjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicHJlZmVycmVkX3VzZXJuYW1lIjoidGVzdGVyIiwiZW1haWwiOiJ0ZXN0ZXJAdGVzdC5jb20ifQ.MIGIAkIBzvH1R-9fNFp8jlw-TeFidmC03uNov6IhDc23XMB9eHga8zdF4ybDmxDoAkB-NAJnDRUDNCtw3ooRxNSApje9oCkCQgHkrbYSN3L5LBA1OM5yb9WSQVaxItcspnCtMtW1QogaAYp0v9JwQA7VHL6ofEp3pcXLaKnFzVgP6FvDCwGgIJGFfw
Run Code Online (Sandbox Code Playgroud)

这是我从管理控制台复制得到的公钥:

MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBTrJ+u+k3rqKmuvzykwcMfJMVEieQtc1ldlj2Q9vfsWHbNc95xmnsIgcYcsJNVZCY8NnzFBmYSa0G7rNjclS8xGQB4uDs4KV91WaDRmc3DqwDvupvWVw3M1RG64FteoGwq098p6bxog/tgyNWeYzOTpfunXi0Yp4p+ZrMxlaYdSMuDyU=
Run Code Online (Sandbox Code Playgroud)

由于passport-jwt需要 PEM 格式,因此我将其输入到库中,如下所示:

-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBTrJ+u+k3rqKmuvzykwcMfJMVEieQ
tc1ldlj2Q9vfsWHbNc95xmnsIgcYcsJNVZCY8NnzFBmYSa0G7rNjclS8xGQB4uDs
4KV91WaDRmc3DqwDvupvWVw3M1RG64FteoGwq098p6bxog/tgyNWeYzOTpfunXi0 …
Run Code Online (Sandbox Code Playgroud)

validation node.js jwt loopbackjs keycloak

6
推荐指数
0
解决办法
2866
查看次数

loopback4 中的自定义验证响应对象?

我在环回中的模型上添加了验证规则。验证工作正常,但我得到的响应消息在某种程度上是自动生成的。我需要根据验证发送自定义响应对象。

我的模型验证是 5 的乘数,如下所示

 @property({
    name: 'name',
    description: "The product's common name.",
    type: 'number',
    required: true,
    // Specify the JSON validation rules here
    jsonSchema: {
      multipleOf: 5
    },
  })
  counter: number;
Run Code Online (Sandbox Code Playgroud)

我收到如下验证消息

{
  "error": {
    "statusCode": 422,
    "name": "UnprocessableEntityError",
    "message": "The request body is invalid. See error object `details` property for more info.",
    "code": "VALIDATION_FAILED",
    "details": [
      {
        "path": ".counter",
        "code": "multipleOf",
        "message": "should be multiple of 5",
        "info": {
          "multipleOf": 5
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要根据我的要求修改响应对象,我可以更新这个响应对象吗?

loopback typescript loopbackjs loopback4

6
推荐指数
0
解决办法
206
查看次数