Я использую .Net в качестве серверной части, и теперь я работаю с angular для части маршрутизации. Я застрял в navagite на другой странице, используя аутентификацию, которую я должен использовать перемещаться по маршрутизатору после подписки, но я не знаю, как
export class LoginComponent {
title = 'webUI.UI';
user = new User();
constructor(private authService: AuthService, private router: Router) {}
login(user: User) {
this.authService.login(user).subscribe((token: string) => {
localStorage.setItem('authToken', token);
});
if (localStorage.getItem('authToken') != null){
??????
}
}
}
мой роутер
const routes: Routes = [
{
path: 'login',
component: LoginComponent
},
{
path: 'signup',
component: SignupComponent
},
{
path: 'home',
component: EmployeepListComponent
},
Пожалуйста, не спамьте тегами. [angular] предназначен для вопросов об Angular 2+, современном фреймворке. [angularjs] предназначен для вопросов об AngularJS 1.x, устаревшем фреймворке. Отредактируйте свой вопрос соответствующим образом. Кроме того, вместо того, чтобы добавлять комментарии с разъяснениями, отредактируйте вопрос, включив в него пояснения.
Сделайте это в компоненте ngOnInit
в приложении:
ngOnInit(){
if (localStorage.getItem('authToken') != null){
this.router.navigete(['login'])
}
}
или в функции входа в систему сделайте следующее:
login(user: User) {
this.authService.login(user).subscribe((token: string) => {
if (token !=null) {
localStorage.setItem('authToken', token);
this.router.navigate(['otherPath'])
}
});
}
Вы также можете использовать Guard
для этого. Подробнее здесь. canActivate
guard может защитить любой компонент внутри вашего маршрутизатора. Таким образом, вы можете проверить свой токен или что-то еще, а затем перенаправить на вход или на страницу, на которую пользователь хочет перейти.
import { Injectable } from "@angular/core";
import { Router } from "@angular/router";
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from "@angular/router";
import { Observable } from "rxjs";
import { tap } from "rxjs/operators";
import { AuthService } from "./auth.service";
@Injectable()
export class CanActivateGuard implements CanActivate {
constructor(
private auth: AuthService,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
const token = this.auth.getToken();
const url = "/token/verify/";
if (!token) {
this.router.navigate(["/login"]);
return false;
}
return this.auth.verifyToken().pipe(
tap(allowed => {
if (!allowed) this.router.navigate(["/login"]);
})
);
}
}
Вот пример Stackblitz.
я пытался исправить, как вы сказали, но я получил эту ошибку ?? ОШИБКА Ошибка: Uncaught (в обещании): Ошибка: NG04002: Не удается сопоставить какие-либо маршруты. Сегмент URL: «домашний» Ошибка: NG04002: Не удается найти ни одного маршрута. Сегмент URL: «домашний»