2016-11-03 9 views
1

ルートをガードするためにCanActivateを実装し、ユーザーがログインしていない場合は/ loginに移動しますが、POSTリクエストでリダイレクトされて404エラーになります。Angular2 Router - canActivateがポストリクエストでリダイレクトしています

@Injectable() 
export class AuthGuard implements CanActivate { 

    constructor(private router: Router) { } 

    canActivate() { 
     console.log("canActivate : AuthGuard"); 
     if (localStorage.getItem('currentUser')) { 
      // logged in so return true 
      return true; 
     } 

     // not logged in so redirect to login page 
     this.router.navigate(['/login']); 
     return false; 
    } 
} 

Browser Console

私はそれが適切にリダイレクトされAuthGuardを削除した場合。どんな体が私を助けることができますか?

app.routes.ts

import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 
import {HomeComponent} from './home/home.component'; 
import {DashBoardComponent} from './dashboard/dashboard.component'; 
import { AuthGuard } from './guards/auth.guard'; 

const appRoutes: Routes = [ 
    { 
     path: 'login', 
     component: LoginComponent 
    }, 
    { 
     path: 'home', 
     component: HomeComponent, 
     canActivate: [AuthGuard], 
     children: [ 
      { path: 'dashboard', component: DashBoardComponent } 
      ] 
    } 
]; 
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes); 

app.module.ts

import { LocationStrategy, HashLocationStrategy } from '@angular/common'; 

@NgModule({ 
    imports:  [ BrowserModule ,routing , CKEditorModule,FormsModule, HttpModule, ReactiveFormsModule, TagInputModule], 
    declarations: [ AppComponent , DashBoardComponent,LoginComponent,HomeComponent], 
    providers: [AuthGuard, AuthenticationService, {provide: LocationStrategy, useClass: HashLocationStrategy}], 
    bootstrap: [ AppComponent] 
}) 

export class AppModule { } 

app.component.ts CHEに

import { Component, OnInit } from '@angular/core'; 

import {DashBoardComponent} from './dashboard/dashboard.component'; 
import {LoginComponent} from './login/login.component'; 
import {HomeComponent} from './home/home.component'; 

@Component({ 
    selector: 'app', 
    template: `<router-outlet></router-outlet>`, 
    precompile: [LoginComponent] 

}) 
export class AppComponent implements OnInit { 
    ngOnInit() { 
     console.log("checkking "); 
    } 
} 
+0

サーバーのサポートHTML5 pushStateしていますか?あなたは 'HashLocationStrategy'を有効にして問題を再現することができますか? –

+0

また、HashLocationstrategyを追加した後でも、コンポーネントコードとrouterLinkの部分を含めることができます。 – refactor

+0

、同じ問題! –

答えて

0

いくつかのヒントck:

  1. RouterModule.forRootとRouterModule.forChildルーティング設定が正しいことを確認してください。
  2. トリガーされている既定のURLを確認します。
  3. ルータではなく、(包みあなたはフォームを使用している)フォームボタンのデフォルトの動作を使用して、次のページに移動するために使用されているかどうか、ボタンのクリックイベントの確認、
+0

が質問を更新しました。 –

+0

ありがとうございますAshwinさん、ありがとうございました。フォームタグを削除して解決しました。 –

関連する問題