2016-07-09 7 views
1

frontend上に角度のあるJS SDKを使用してループバックJSアプリケーションを作成しています。私は現在のコンテキストにアクセストークンがあるかどうかを確認するモデルのためのfindリモートメソッドをアフターフックしています。ユーザーがログインしていてもループバックはaccessTokenが未定義です

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を取得することです。これは私がログインしているにもかかわらず起こります、そして、もし私が再びリクエストを送ったら、魔法のようにトークンが再び現れ、許可が与えられます。

このエラーが発生するたびに複製する方法がわかりません。私はセッションがiddleを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); 
     }); 
}; 

私が理解できないのは、それが時々起こり、ときどき起こらない理由です。誰も私がエラーを見つけるのを助けることができますか?代わりに、リモートフックの

+1

これはあなたの問題とは関係ありませんが、if(at == undefined || at == null){'緩い等価性のためにundefined *か* nullをチェックする必要があります。アルゴリズム。 – gcampbell

+0

コードの訂正ありがとう:) –

答えて

0

、あなたはあなたのモデルに、次のACLを使用する必要があります。

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

答えをありがとう。しかし、私はまだcurrentUserIdを取得して追加のチェックを行うフックのトークンが必要です –

+0

フェアで十分ですが、ループフックではなくloopback.token()ミドルウェアを使用することをお勧めしますが、動作する1つの機能について説明します。問題の原因を絞り込むことができれば、GitHubのLoopBackレポに投稿できますか?コメント(@richardpringle)で私のことを言い、誰かがそれをさらに調べるようにします。 – richardpringle

0

あなたは次のことを確認してくださいことはできますか?

  1. server.jsのトークンとコンテキストミドルウェアの順番です。コンソールで

    app.use(loopback.context()); 
    app.use(loopback.token()); 
    
  2. チェック保存されたアクセストークン、localStorageまたはsessionStorageの場所を知っている:私はこの順序を持​​っています。ブラウザのタブを閉じるとsessionStorageが削除されます。

私の評判はまだ50ではありません:まだコメント機能は使用できません。これはコメントのように見えた場合、謝罪。

関連する問題