日報クラウドnipoでは、ログインをする処理が書かれています。
当然ですね。あなたが誰なのかわからないと、どの日報を表示したらいいかわからんもの。
なので、ログインしてもらうことで、あなたが誰かを特定するわけです。
SPA(シングルページアプリケーション)は、これまでのWebとちょっと考えが違う
ので、ログインのからくりも少し考える必要があります。
今回は、Angular JS + ui-routerを前提にお話します。
実際の動作するプログラムはnipoのホームページから確認してください
Angular JSは、ページ遷移の機能が若干貧弱なので、
外部プラグインであるUI-routerを使うのが通なのです。
Angura通を名乗りたければUI-routerを使うべきです。
さて、UI-routerを使ったログインページの仕組みです
.config(function ($stateProvider, $urlRouterProvider ) { $urlRouterProvider.otherwise("/"); $stateProvider .state('/', { url: "/", views: { "viewA": { templateUrl: "views/main.html" ,controller:"MainCtrl" }, }, loginRequied:true, }) }) //中略〜 .run(function($rootScope , $state ){ $rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams){ //ログイン要求ページはログインしていない場合ログインフォームへ飛ばす if (toState.loginRequid) { if (/*ログイン済みかをここでチェックする*/) { //ログインしていない $state.go('/login'); e.preventDefault(); return ; } } }) })
ポイントはloginRequied:trueの部分です。
ログインが必要なページには、loginRequid:trueを付けておきます。
toState.loginRequidが真のとき、
ログイン済みかチェックをします。未ログインの場合はログインページヘ飛ばします。
e.preventDefault();で標準の挙動(本来のページ遷移)をキャンセルするのも忘れずに。
同じ仕組で、例えば管理者権限が必要なページであればadminRequied:trueとか
適当な名前を付けて作ってあげればいいのです。
そして同じようにtoState.adminRequiedとしてチェックします。
nipoの場合、グローバルメニューが常に表示されている(ログイン前でも)ので、
未ログイン時に、グローバルメニューが押されても、ページが遷移しないように
しています。
実際の動作例はこちらで確認できます
グローバルメニューを押してもページが遷移しないはずです。確認してください