-1

与此相关:上一期

我定义了这个模型:

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 中删除了用户和 accessToken 模型。所以我什至不知道它从哪里获得关系信息,除非它是在某个地方烘焙的。无论如何,如果我尝试/customer/53c6f5d4769ed...在标题中调用并提供令牌,我会得到 401。从技术上讲,Id 是正确的,只是 FK 名称错误。

我试过像

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

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

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

对我的 authN 使用代码优先而不使用“用户”模型如何连接 accessToken(也是代码优先)?扭曲将是我计划拥有多个身份验证模型(即客户、供应商、员工)。所以真正的问题是我如何连接它以允许每种类型的“用户”获得他们自己的访问令牌???

清如泥??;-)

4

2 回答 2

0

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

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

我建议你把问题分成更小的问题。随时发布到https://groups.google.com/forum/#!forum/loopbackjs

于 2014-07-17T04:37:01.633 回答
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

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

请参见上面的示例。

扭曲将是我计划拥有多个身份验证模型(即客户、供应商、员工)。所以真正的问题是我如何连接它以允许每种类型的“用户”获得他们自己的访问令牌???

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

于 2014-07-23T08:49:02.510 回答