2014-07-16 101 views
-1

與此相關的FK屬性:previous issue客戶模型返回基於用戶id,而不是客戶ID

我有這個模型中定義:

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

如果我什麼也不做,我得到的所有額外的我期望的用戶端點(登錄,註銷,訪問權限等)。然而我的登錄結果給我:

{ 
    "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

LoopBack提供了基本的User和AccessToken模型。從models.json中可以看到,它們可以擴展爲自定義行爲。模型可以被引用爲app.models.user和app.models.accessToken。 userId是從訪問令牌到用戶模型的外鍵,可以將其重命名爲'customerId'。

要使用'$ owner'角色強制實施ACL,模型實例需要具有'用戶'或'userId'屬性或與用戶模型的子類關聯的'belongsTo'關係。

我建議你把問題分成更小的問題。隨意張貼到https://groups.google.com/forum/#!forum/loopbackjs

0

所以我甚至不知道它在哪裏得到關係信息,除非它在某處被烘烤。

關係信息包含在User模型中。由於您的customer正在延伸User,它也會繼承關係。

我嘗試之類的東西

變種的accessToken = mongoDev.createModel( '的accessToken',{},{基: 「的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'); 
}); 

模塊版本:

[email protected] 
[email protected] 
[email protected] 

利用二維碼的第一和不使用「用戶」模式爲我authN我如何連接起來的accessToken(也代碼優先)?

查看上面的例子。

而且,我將計劃擁有多個authN模型(即客戶,供應商,員工)。所以真正的問題是我如何連線這個以允許每種類型的'用戶'獲得他們自己的accessTokens?

我不認爲LoopBack現在支持,請打開github問題請求這樣的功能。