2016-12-28 7 views
1

ログインする必要があるangularJSアプリケーションがあります。アプリケーションで自分の状態を定義しました。ログインしてブラウザに状態を直接開くと、404にリダイレクトされます。anglejsアプリケーションでは、ユーザーがログインしていなくてもhtmlページが表示されます

ログインすることなくブラウザで.htmlページを明示的に開くと、HTML要素と非HTML要素が表示されます。レンダリングされたangularJS式。デベロッパーツールの[ネットワーク]タブでは、ステータスコードは200です。代わりに404を取得し、404またはログインページにリダイレクトするにはどうすればよいですか?

私のアプリケーションはApache Tomcatでホストされています。

何か助けていただければ幸いです。

更新:

次の例である:(私もコードを提供することができません)。

私は、フォルダ内のビューとしてClientView.htmlを持つフォルダクライアントを持っているとしましょう。以下は私のapp.jsのルートです。

.config(function ($stateProvider, $httpProvider, $urlRouterProvider) { 
$urlRouterProvider.otherwise('/'); 
$stateProvider 
    .state('app.client', { 
    // child state of `app`      
    url: '/client', 
    views: { 
     '[email protected]': { 
      templateUrl: 'client/ClientView.html', 
      controller: 'ClientCtrl' 
     }, 
     data: { 
      requireLogin: true 
     } 
    } 
}) 

});

私がログインせずにhttp://localhost/app/clientとしてアプリケーションにアクセスした場合、これは404

に私を取るんが、私はhttp://localhost/app/client/ClientView.htmlにアクセスしようとするならば、それは私にそのページ内のHTML要素を示しただけでなく、非レンダリングAngularJs表現。ログインページや404にリダイレクトするにはどうすればよいですか?ログインページにリダイレクトされていない場合

$rootScope.$on('$stateChangeStart', function(event, toState , toParams, fromState, fromParams) 
{ 
    if(toState.data.requireLogin=== true && !$rootScope.isAppLog) { 
     event.preventDefault(); 
     $state.go('login'); 
    } 
}); 

これかどうかをユーザーLOGGEDINをチェックしたりせず、:。

+1

コードを入力してください。私たちが助けることができるように。 – SaiUnique

+0

それぞれのコントローラに条件を設定し、404ビューに無効なリダイレクトがある場合はセッションをチェックします。これは私がこの問題にアプローチした方がよいでしょう –

+0

@Sai質問を更新しました。私はコードを提供することはできません。 – pix1289

答えて

0

これは私が現在どのように処理したかです。ログインが成功すると、sessionStorage変数を作成してtrueに設定しました。アプリケーションのすべてのHTMLページで、上記のフラグをチェックして短いスクリプトを追加しました。設定されていない場合は404ページにリダイレクトされます。

これは明らかに正しい方法ではなく、冗長性を備えています。他の誰かがより良いアプローチをしているなら、親切に私に知らせてください!

0

に変数isAppLog = trueときにユーザーがログイン設定し、ログインまたは使用していないか確認してください。

+0

これを試します。ありがとうございます。これは、私が知っている定義されたルートでは動作しますが、http://localhost/app/client/ClientView.htmlのようなURLに対しては動作しますか? – pix1289

+0

あなたの意見は分かりません。しかし、それは動作します。 – SaiUnique

+0

AngularJSアプリケーションでは、app.js内の定義済みのルートを使用して、ある州から別の州に移動します。あなたのコードにある方法:$ state.go( 'login')。これをルートとして定義し、ロードするテンプレートと使用するコントローラを定義しました。私が言っているのは、ブラウザに/ loginとしてルートを入れるのではなく、 /login/LoginView.htmlを入れてみてください。 (ここでは、loginはフォルダであり、LoginView.htmlは同じフォルダ内のテンプレートです) – pix1289

関連する問題