簡體   English   中英

即使用戶已登錄,Loopback仍會引發accessToken undefined

[英]Loopback throws accessToken undefined even though a user is logged in

我正在使用前端角度JS SDK的環回JS應用程序。 我在模型的find遠程方法上有一個掛鈎,用於驗證當前上下文中是否存在訪問令牌。

  Team.afterRemote('find',function(context,boards,next){
      var ExeboardUser = app.models.ExeboardUser;
      var ExeboardUserBoard = app.models.ExeboardUserBoard;


      var ctx = loopback.getCurrentContext();

      var at = ctx.get('accessToken');
      if(at==undefined || at==null){
        // return 401
        console.log("Unauthorized: Find Boards-User not logged in.");
        var newError = new Error("Unauthorized: Find Boards");
        newError.status = 401;
        next(newError);
      }
      else{
        //.. more verifications and operations on the data
      }

  });

此驗證效果很好....有時候。 我遇到的問題是隨機時間我得到401 Unauthorized,因為loopback得到了一個未定義的訪問令牌。 即使我已登錄,也會發生這種情況,如果我再次發送請求,則令牌會神奇地重新出現並授予權限。

我不知道每次出現此錯誤時如何復制。 我知道如果我離開會話謎語5-10分鍾,或者如果我對前端進行更改並且我刷新,則會發生(有時)。

在angularJS上,我在控制器的開始處調用端點。 這意味着我會在用戶輸入具有控制器的URL時立即發出請求。

var getTeam = function(){
  Team.find({filter:{where:{ id:$stateParams.id }}})
    .$promise
    .then(function(response){
        $log.log("SUCCESS",response);

      },
      function(err){
        $log.log(err);
      });
};

我無法理解的是為什么它有時發生,有時不發生。 任何人都可以幫我發現錯誤嗎?

您應該在模型上使用以下ACL,而不是遠程鈎子:

{
  "accessType": "EXECUTE",
  "principalType": "ROLE",
  "principalId": "$unauthenticated",
  "permission": "DENY",
  "property": "find"
}

你能檢查一下嗎?

  1. server.js文件中令牌和上下文中間件的順序。 我有這個訂單:

     app.use(loopback.context()); app.use(loopback.token()); 
  2. 檢入控制台以了解存儲的訪問令牌, localStoragesessionStorage 關閉瀏覽器選項卡后會刪除sessionStorage

我還不能使用評論功能,因為我的聲譽還不到50 :)。 道歉,如果這看起來更像評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM