2016-04-30 1 views
0

私のangularjsアプリケーションでは、の/tasks URLからタスクを取得しています。ユーザーが手動で/tasks urlに行くと、彼はjsonデータを取得します。 show jsonデータをユーザーに表示しないようにする必要がありますか?ベストプラクティスは何ですか?たとえば、バックエンドでは、リクエストがajaxであるかどうかを確認できます。そうでない場合 - ベースURLにリダイレクトします。バックエンド - laravel 5Angularjsルート:ユーザーが手動でjsonデータを取得できないようにする

答えて

1

キーワード 'を防ぐ投稿者'から、特定のユーザーのアクセス権限を定義するためのロジックが必要になると思われます。

あなたは、ユーザーがこれまでのルートにアクセス前に承認ロジックの解決に固執することができます。 $routeProvider.when()メソッドのresolveプロパティを利用できます。 docsによれば、resolve性がある

...

コントローラに注入しなければならない依存関係の任意地図。これらの依存関係のいずれかが約束である場合、ルータはそれらがすべて解決されるのを待つか、コントローラがインスタンス化される前にすべて拒否されるのを待ちます。

約束事がすべて解決された場合は、解決された約束事の値が注入され、$ routeChangeSuccessイベントが発生します。約束のいずれかが拒否された場合は、$ routeChangeErrorイベントが発生します。 、

決意がいるのそれぞれが約束を返すことが(注射用の依存関係など)の機能を取り込み、約束のいずれかが拒否された場合は、引用されたとして、エラーがスローされ、文字通りどちらのルートもビューが読み込まれます。

認証ロジックを動作させるには、ユーザーがルートを許可されていることを解決する、またはリクエストを拒否する、いくつかのバックエンド機能/サービスに対するAPIコールを実行する必要があります。あなたも約束の失敗に何かを実行したいと思います場合

.when('/tasks', { 
resolve: { 
    authorize: function(authService){ 
      //some api call to get either acceptance (e.g. status code 200) or rejection (status code 500) for the user being authorized 
      return authService.authorize(); 
     } 
    }, 
    controller: function(){ 
     //route controller logic 
    } 
}) 

あるいは、あなたは単にcatch()ハンドラとの約束を連鎖によってそうと力強くから返された約束を拒否するエラーをスローする可能性catch()それ自身。

.when('/tasks', { 
resolve: { 
    authorize: function($location, authService){ 
     //some api call to get either acceptance or rejection for the user being 
     return authService.authorize() 
      .then(function(){ 
       //some logic on success of the promise 
      }) 
      .catch(function(){ 
       $location.path('/auth/login/'); 
       throw 'Authorization error'; 
      }); 
     } 
    }, 
    controller: function(){ 
     //route controller logic 
    } 
}) 
関連する問題