2015-06-04 35 views
1

loopback.getCurrentContext()對我來說爲null。爲什麼?我需要從上下文中抓取當前用戶。操作符的ctx不是相同的上下文,並且不包含我所需要的內容,據我所知。如何在'保存前'操作掛鉤中獲取當前用戶?

Customer.observe('before save', function checkPermission(ctx, next) { 

    //do I have a loopback context that works? 
    var context = loopback.getCurrentContext(); 
    console.log("context is: " + context);//null! 
}); 

感謝

回答

-4

我想你應該add a pre-processing middleware來填充當前用戶的上下文。

/server/server.js

app.use(loopback.context()); 
app.use(loopback.token()); 

app.use(function setCurrentUser(req, res, next) { 
    if (!req.accessToken) { 
     return next(); 
    } 
    app.models.Customer.findById(req.accessToken.userId, function(err, user) { 
     if (err) { 
      return next(err); 
     } 
     if (!user) { 
      return next(new Error('No user with this access token was found.')); 
     } 

     var loopbackContext = loopback.getCurrentContext(); 
     if (loopbackContext) { 
       loopbackContext.set('currentUser', user); 
     } 
     next(); 
    }); 
}); 

/common/models/customer.js

var loopback = require('loopback'); 
module.exports = function(Customer) { 
    Customer.observe('before save', function checkPermission(ctx, next) { 

     var context = loopback.getCurrentContext(); 
     var currentUser = context && context.get('currentUser'); 
     console.log(currentUser); 

     next(); 
    }); 
}; 
+0

謝謝,我試圖添加代碼server.js但沒有改變。仍爲null上下文。太奇怪了。這與使用Postgres有關嗎?有關於MongoDB和MySQL的討論列表有一個null上下文錯誤。 – user798719

+0

我要從零開始嘗試一個總的準系統項目,看看我是否仍然得到一個null上下文。如果是這樣,我把它稱爲一個錯誤,並轉移到其他生產用途。 – user798719

+0

更新,我有一個準系統項目和'保存'前的loopback.getCurrentContext()確實爲null。不知道這只是我還是一個錯誤。我正在使用Postgres連接器。 – user798719

0

我知道這個問題是舊的,但,這可能幫助一些人

根據環迴文檔 https://loopback.io/doc/en/lb3/Using-current-context.html

在回送2.x中,該功能默認是出於兼容性原因被禁用。要啓用,添加

首先你需要添加到您的客戶模型

"injectOptionsFromRemoteContext": true 

則:

Customer.observe('before save', function checkPermission(ctx, next) { 
    //ctx.options returns tokenid, userid & ttl 
    console.log(ctx.options); 
    return next(); 
});