6

ログインページに取り組んでいます。成功すると、ホームページにリダイレクトされます。デフォルトでは、ログイン ページに次のコードを表示します。

app.run(function($rootScope, $location) {
  $rootScope.$on('$routeChangeSuccess', function() {
      $location.url("/login");
  });
});

次に、バックエンドからユーザー/パスの詳細を検証した後、ユーザーをホームページに移動します。

$scope.login = function() {
    if ($scope.username === 'admin' && $scope.password === 'pass') {
      console.log('successful')
      $rootScope.$on('$routeChangeSuccess', function() {
          $location.url("/home")
      });
      $location.url("/blah");
    } else {
      $scope.loginError = "Invalid username/password combination";
      console.log('Login failed..')
    };
  };

ステートメントのセクションの$location.url前の秒を削除すると、リダイレクトが機能しないようです。ただし、その URL ( ) を使用していないため、 に移動します。ただし、urlが削除されると、リダイレクト ロジックは機能しません。elseif/blahhomeblah

なぜ two を使用する必要があるのか​​ 理解できないようです$location.url()。このリダイレクト システムがどのように機能するかを誰かが理解するのを手伝ってくれたら幸いです。

これはベスト プラクティスではないかもしれません。これを改善する方法についての提案をお待ちしています。Plunker の例を次に示します。

4

1 に答える 1

4

全体として、これは間違った道を進んでいます IMO ...

クライアント側は単純なデバッガーで常に「変更」できるため、サーバー側のリソースをロックダウンする必要があることは明らかです...しかし、あなたはすでにそれを知っていると思います...

https://github.com/dotJEM/angular-routinghttps://github.com/angular-ui/ui-router IMOなどの代替ルーティング ソリューションは、これに対するより適切な処理を提供しますが、いくつかのアプローチを評価してみましょう。 .

1つは次のようになります: http://plnkr.co/edit/ZUKB1v?p=previewそれにはすべてのルートでユーザーを解決する必要がありますが.. :(... もう1つは: http://plnkr. co/edit/iM9cA1?p=previewもう少し良いかもしれません...

最後に、サーバーから "Unauthorized" エラー コードが返されたときにログイン ページにリダイレクトする http インターセプターを提供することがよくあるようです。しかし、これは準備ができているよりも高度なアプローチのように思えるかもしれません.

于 2013-11-07T13:49:13.183 に答える