基于User的客户模型基于userId而不是customerId返回FK属性

时间:2014-07-16 23:16:18

标签: javascript loopbackjs strongloop

与此相关:previous issue

我定义了这个模型:

var customer = mongoDev.createModel('customer',
{
    id: {
        type: String,
        id: true
    },
    firstName: String,
    lastName: String,
    badge: String,
    email: String
},
{
    strict: true,
    base: "User"
});

如果我什么都不做,我会得到我期望的所有额外用户端点(login,logout,accessTokens等)。但是我登录的结果给了我:

{
  "id": "ssOzK8EswH...",
  "ttl": 1209600,
  "created": "...",
  "userId": "53c6f5d4769ed..."
}

似乎userId应该是customerId。我删除了用户& models.json中的accessToken模型。因此,我甚至不知道它获取关系信息的位置,除非它在某个地方被烘焙。无论如何,如果我尝试调用/customer/53c6f5d4769ed...并在标题中提供令牌,我会获得401.从技术上讲,Id是正确的,只是错误的FK名称。

我尝试过像

这样的事情
var accessToken = mongoDev.createModel('accessToken',{},{base: "AccessToken"});
accessToken.belongsTo(customer, {as: 'customer', foreignKey: 'customerId'});

我认为这改变了我的FK名称,但是在调用后续端点时我仍然有401。

这是我自己的地方。所以我的问题实际上是这样的:

首先使用代码而不使用'用户'我的身份验证模型如何连接accessToken(也是代码优先)?而扭曲的是我计划拥有多个authN模型(即客户,供应商,员工)。所以真正的问题是如何连接这个以允许每种类型的用户'得到自己的accessTokens ???

清除泥浆? ; - )

2 个答案:

答案 0 :(得分:0)

LoopBack发布了基本的User和AccessToken模型。它们可以扩展为自定义行为,如您在models.json中看到的那样。然后可以将模型引用为app.models.user和app.models.accessToken。 userId是从访问令牌到用户模型的外键,可以将其重命名为'customerId'。

要使用“$ owner”角色强制执行A​​CL,模型实例需要具有“owner”或“userId”属性,或者与用户模型的子类的“belongsTo”关系。

我建议您将问题分成较小的问题。随意发布到https://groups.google.com/forum/#!forum/loopbackjs

答案 1 :(得分:0)

  

所以我甚至不知道它在哪里获得关系信息,除非它在某个地方被烘焙。

关系信息包含在User模型中。由于customer正在扩展User,因此它也将继承关系。

  

我尝试过像

这样的事情      

var accessToken = mongoDev.createModel(' accessToken',{},{base:" AccessToken"});      accessToken.belongsTo(customer,{as:' customer',foreignKey:' customerId'});

AFAIK外键必须为userId,无论您的用户模型名称如何。

var accessToken = mongoDev.createModel('accessToken',{},{base: "AccessToken"});
accessToken.belongsTo(customer, {as: 'user', foreignKey: 'userId'});

当我尝试编写示例应用程序来重现问题时,该应用程序对我来说很好(使用memorymongodb连接器进行测试)。

var loopback = require('loopback');

var customer = loopback.createModel('customer',
{
    id: { type: String, id: true },
    firstName: String,
    lastName: String,
    badge: String,
    email: String
},
{
    strict: true,
    base: "User"
});

var app = loopback();

app.dataSource('db', {
 connector: 'mongodb' // or memory
});

app.model(loopback.AccessToken, { dataSource: 'db' });
app.model(customer, { dataSource: 'db' });

app.use('/api', loopback.rest());
app.use('/explorer', require('loopback-explorer')(app));
app.listen(3000, function() {
  console.log('Explore at http://localhost:3000/explorer');
});

模块版本:

loopback@1.10.0
loopback-datasource-juggler@1.7.1
loopback-connector-mongodb@1.4.1
  

首先使用代码而不使用'用户'我的身份验证模型如何连接accessToken(也是代码优先)?

参见上面的例子。

  

并且扭曲将是我计划拥有多个authN模型(即客户,供应商,员工)。所以真正的问题是如何连接这个以允许每种类型的用户'得到自己的accessTokens ???

我认为LoopBack现在不支持,请打开一个请求此功能的github问题。