ユーザがブラウザタブで経路を手動で変更してEnterキーを押したときに発生する問題に悩まされています。これにより、私のui-router/angular2-routerはユーザによって入力された状態にナビゲートされます。私はこれを防ぎ、自分のウェブサイトのボタンクリックで実装したフローを通してのみルーティングを許可します。ユーザがブラウザタブでURLを手動で変更した場合の経路指定を防止する
答えて
その2018!角度5はここにあり、この問題の解決策もあります。 BAMM CanActivateクラスが実装できるインターフェイスで、ルートをアクティブ化できるかどうかを判断するガードです。
私たちは、この機能を追加し、定義した条件に基づいていくつかのルートへのアクセスを禁止することができます。 CanActivateインタフェースを実装し、canActivateメソッドを定義するAuthGuardなどのサービスを、ルートコンフィグレーションに追加することができます。ここで
const appRoutes: Routes = [
{ path: 'crisis-center', component: CrisisListComponent },
{
path: 'heroes',
canActivate: [AuthGuard],
component: HeroListComponent,
data: { title: 'Heroes List' }
},
{ path: '',
redirectTo: '/heroes',
pathMatch: 'full'
},
{ path: '**', component: PageNotFoundComponent }
];
ルートheroes
とそのすべての子供たちがguradの層を持っている:我々はいくつかの条件に対してへのアクセスを保護するルートを持っている場合は、次のよう
class Permissions {
canGoToRoute(user: UserToken, id: string): boolean {
return true;
}
}
@Injectable()
class AuthGuard implements CanActivate {
constructor(private permissions: Permissions, private currentUser: UserToken) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean>|Promise<boolean>|boolean {
return this.permissions.canGoToRoute(this.currentUser, route.params.id);
}
}
は、我々はガードを追加しますその上。したがって、AuthGuardサービスによって返されるブール値に基づいて、ユーザーはこのルートへのアクセスを許可または拒否されます。
このコードをapp.jsに書き込みます。
.run(['$rootScope', '$state', '$stateParams','LoginStatusService',function($rootScope, $state, $stateParams,LoginStatusService) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
$rootScope.$on('$stateChangeSuccess', function(event, toState) {
//Write Routes login here
if(LoginStatusService.getUserStatus()===false){
$state.go('core.login');
}
});
}])
$stateChangeStart
イベントは、これを処理するための適切な場所です。このイベントは、URL
に移動しようとすると発生します。その時点で、ユーザーが認証されているかどうかを確認し、認証されていない場合は、ログインし直すことができます。あなたはこのようなイベントにフックアップでしょう
:
angular
.module('myApp')
.run(function ($rootScope, $state, authFactory) {
$rootScope.$on('$stateChangeStart', function() {
//if user is not logged in
if(!authFactory.isAuthed()){
$state.go('login')
}
})
});
はそれがお役に立てば幸いです。
あなたのソリューションをありがとうございますが、ユーザーが認証されていることが、私はちょうど彼が手動でURLを変更して状態にアクセスするのを防ぎたいです。この方法で、前の画面のデータを順番に取得する必要がある状態に到達することがありますが、急なルーティングのために空になります。 –
- 1. 特定の状況下での経路の移動を防止する
- 2. モーダルで経路を指定する
- 3. ip routeを使って経路を手動で設定する
- 4. AngularJS - 経路変更が手動URL変更または$ location.path設定からのものであることを把握する
- 5. Expressで経路パラメーターが空の場合
- 6. 経路指定は合格しませんが経路は正しく動作します
- 7. 1つの経路を経路指定し、条件付き経路のビュー
- 8. Resolveを使用して経路変更を停止する
- 9. ルートは経路を指定します
- 10. 経路を編集する経路が一致しない経路指定エラーGET
- 11. GraphxでSparkを使用した場合の最短経路パフォーマンス
- 12. 経路上にない場合は( '/')、フォームを送信した後にその経路に移動する
- 13. 経路指定された経路のために角度(2)のrouterLinkActive指令を使用する
- 14. Angular2キャンセル経路の変更(非同期リゾルバを使用している場合)
- 15. Node.jsは経路指定変数を渡します
- 16. アンドロイドソフトキーボードがアクティブな場合、ウェブページのビューポートのサイズ変更を防止する
- 17. 現在のユーザーをLaravelで経路指定しますか?
- 18. AngularJSを使用して経路を動的に変更する
- 19. RequiredFieldValidatorが失敗した場合に投稿を防止する
- 20. 角度:ビューに変更が加えられた場合はルート変更を防止します
- 21. ブラウザが更新された場合、URLを変更します
- 22. ExpressJS:ミドルウェアの経路を変更する
- 23. レールの経路を変更する
- 24. 経路内のパラメータを変更する
- 25. keyupイベントがangular2で発生した場合のデフォルトのクリックイベントを防止する
- 26. Angularjs動的経路templateUrl変更
- 27. 反応ルータを使用して設定した場合のshow routesの経路
- 28. 特定のブラウザタブ/ウィンドウでURLを開く
- 29. CSS経由でSafari(Mavericks/iOS7)の合字を防止する
- 30. ユーザが停止しているとユーザのログインを防止する
何か汚い方法を使用せずにできません。 –
もしあればお勧めします。 –
これはかなり可能ですが、このリンクを見てください。https://github.com/angular-ui/ui-router/wiki .. $ stateChnageStartイベントを聞く必要があるのは、ナビゲーションと書き込みの変更があるたびに角張ったイベントですいくつかのロジックがナビゲートを停止する。 – immirza