Угловой canactivate не огонь - PullRequest
       13

Угловой canactivate не огонь

0 голосов
/ 04 сентября 2018

Я работаю над проверкой подлинности Asp.Net Core, Angular 6 и jwt, и столкнулся с проблемой службы безопасности. Я настроил его правильно (я надеюсь, что так), но он никогда не запускается при навигации по компонентам, он идет прямо к бэкэнду, и я получил ошибку 401 (и это правильно), я потратил несколько часов с этой проблемой. Что я пропустил?

Спасибо.

сторожевой auth.ts

@Injectable()
export class AuthGuardService implements CanActivate {

constructor(private router: Router, private aut_srv: AuthService) { console.log("Hi!"); } // <- this console.log never run

canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
) {

    let valid: boolean = true;

    if (!this.aut_srv.isLoggedIn()) {
        valid = false;
        this.router.navigate(["/login"], { queryParams: { returnUrl: state.url } });
    }

    return valid;
  }
 }

app.shared.module.ts (для ясности опущен весь импорт)

@NgModule({
declarations: [
    AppComponent,
    NavMenuComponent,
    HomeComponent,        
    LoginComponent
],
imports: [
    CommonModule,
    HttpClientModule,
    FormsModule,
    RouterModule.forRoot([
        { path: '', redirectTo: 'home', pathMatch: 'full', canActivate: [AuthGuardService] },
        { path: 'login', component: LoginComponent },
        { path: 'home', component: HomeComponent },
        { path: 'configuration', component: ConfigurationComponent },
        { path: 'orders-week', component: OrderWeekComponent },
        { path: '**', redirectTo: 'home' }
    ])
],
providers: [
    AuthGuardService,        
    AuthService
  ]
})
export class AppModuleShared {
}

auth.services.ts

@Injectable()
export class AuthService {
authKey: string = "auth";

private base_path = 'api/token/auth';

constructor(private http: HttpClient,
    @Inject(PLATFORM_ID) private platformId: any,
    @Inject("BASE_URL") private base_url: string) {

    this.base_path = `${base_url}${this.base_path}`;
}

login(username: string, password: string): Observable<boolean> {

    var data = {
        user: username,
        password: password,
        grant_type: "password"
    };

    return this.http.post(this.base_path, data)
        .pipe(map((res: ITokenResponse) => {
            let token = res && res.token;

            if (token) {
                this.setAuth(res);
                return true;
            }

            return Observable.throw('Unauthorized');
        }));
}

logout(): boolean {
    this.setAuth(null);
    return true;
}

setAuth(auth: ITokenResponse | null): boolean {
    if (isPlatformBrowser(this.platformId)) {
        if (auth) {
            localStorage.setItem(
                this.authKey,
                JSON.stringify(auth));
        }
        else {
            localStorage.removeItem(this.authKey);
        }
    }
    return true;
}

getAuth(): ITokenResponse | null {
    if (isPlatformBrowser(this.platformId)) {
        var i = localStorage.getItem(this.authKey);
        if (i) {
            return JSON.parse(i);
        }
    }
    return null;
}

isLoggedIn(): boolean {
    if (isPlatformBrowser(this.platformId)) {
        return localStorage.getItem(this.authKey) != null;
    }
    return false;
}
}

1 Ответ

0 голосов
/ 04 сентября 2018

Вам необходимо настроить canActivate Route Guard на допустимый путь маршрута «home» вместо пустого пути.

может активировать: [AuthGuardService]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...