与此相关: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 ???
清除泥浆? ; - )
答案 0 :(得分: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。
答案 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'});
当我尝试编写示例应用程序来重现问题时,该应用程序对我来说很好(使用memory
和mongodb
连接器进行测试)。
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问题。