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



与此相关:上一期

我已经定义了这个模型:

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

如果我不做任何其他事情,我将获得我期望的所有额外的用户端点(登录、注销、accessTokens等)。然而,我的结果从登录给我:

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

似乎userId应该是customerId。我已经删除了用户&从models.json中获取模型。所以我甚至不知道它是从哪里获得关系信息的,除非它在某个地方被烤熟了。无论如何,如果我尝试调用/customer/53c6f5d4769ed...并在报头中提供令牌,我会得到401。从技术上讲,Id是正确的,只是错误的FK名称。

我试过

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

我认为这为我改变了FK名称,但在呼叫后续端点时,我仍然得到401。

这是我自己的地方。我的问题是:

使用代码优先,而不是使用"用户"模型为我的authN我如何连接accessToken(也是代码优先)?而扭转将是我计划有多个authN模型(即客户,供应商,员工)。所以真正的问题是我如何连接这个,以允许每种类型的"用户"获得自己的accessTokens??

清晰如泥??: -)

环回船基本用户和AccessToken模型。它们可以被扩展以自定义行为,就像你在models.json中看到的那样。然后这些模型就可以被引用为app.models.user和app.models.accessToken。userId是访问令牌到用户模型的外键,它可以重命名为'customerId'。

要使用'$owner'角色强制acl,模型实例需要有一个'owner'或'userId'属性,或者一个'belongsTo'关系到用户模型的子类。

我建议你把问题分成几个小问题。请随意发布到https://groups.google.com/forum/#!forum/loopbackjs。

所以我甚至不知道它从哪里获得的关系信息,除非它在某处被烘烤。

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

我试过

var accessToken = mongoDev. varcreateModel (accessToken,{},{基地:"accessToken"});accessToken。belongsTo(customer, {as: 'customer', foreignKey: 'customerId'});

不管你的用户模型是什么,外键必须是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

使用代码优先,而不是使用"用户"模型为我的authN我如何连接accessToken(也是代码优先)?

参见上面的例子

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

我不认为环回现在支持,请打开一个github问题请求这样的功能。

最新更新