Angular 有角度的6个防护装置,即使在应该的情况下也会阻塞';T
我有一个问题与角6路线守卫。当我点击登录按钮时,它不会将我重定向到预定路线。 我的html调用Angular 有角度的6个防护装置,即使在应该的情况下也会阻塞';T,angular,typescript,angular6,angular-router-guards,Angular,Typescript,Angular6,Angular Router Guards,我有一个问题与角6路线守卫。当我点击登录按钮时,它不会将我重定向到预定路线。 我的html调用login()函数,而loginService.isAutenticated返回true当执行doLogin()方法时,它在保护本身中返回false loginComponent.ts import { Component, OnInit } from '@angular/core'; import { User } from '../common/user.model'; import { Login
login()
函数,而loginService.isAutenticated
返回true
当执行doLogin()
方法时,它在保护本身中返回false
loginComponent.ts
import { Component, OnInit } from '@angular/core';
import { User } from '../common/user.model';
import { LoginService } from './login.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
providers: [LoginService]
})
export class LoginComponent implements OnInit {
private usuario: User = new User();
msg: string;
constructor(private service: LoginService) { }
ngOnInit() {
}
login() {
this.service.fazerLogin(this.usuario);
}
limpar() {
this.usuario.nome = '';
this.usuario.senha = '';
}
}
import { Injectable } from '@angular/core';
import { User } from '../common/user.model';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Router } from '@angular/router';
@Injectable()
export class LoginService {
url = 'api';
constructor(private http: HttpClient,
private router: Router
) { }
isAuthenticated = false;
doLogin(user: User) {
if (user.name === 'admin' && user.pass === 'admin') {
this.isAuthenticated = true;
this.router.navigate(['/principal']);
} else {
console.log('Auth Failed');
}
}
userIsAuthenticated() {
return this.isAuthenticated;
}
}
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { PrincipalComponent } from './principal/principal.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { PendenciasComponent } from './pendencias/pendencias.component';
import { TesteComponent } from './teste/teste.component';
import { AuthGuard } from './guards/auth.guard';
const appRoutes: Routes = [
{ path: '', component: LoginComponent},
{ path: 'login', component: LoginComponent },
{ path: 'principal', component: PrincipalComponent,
canActivate: [AuthGuard],
children: [
{ path: 'pendencias', component: PendenciasComponent,
canActivate: [AuthGuard]
},
{ path: 'teste', component: TesteComponent,
canActivate: [AuthGuard]
},
]
},
{ path: '**', component: PageNotFoundComponent },
];
export const routing = RouterModule.forRoot(appRoutes);
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { LoginService } from '../login/login.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor (private loginService: LoginService,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | boolean {
// if (this.loginService.usuarioEstaAutenticado()) {
if (this.loginService.isAuthenticated) {
console.log('canActivate retornou true');
return true;
}
this.router.navigate(['/login']);
console.log(this.loginService.isAuthenticated);
console.log('canActivate retornou false');
return false;
}
}
loginService.ts
import { Component, OnInit } from '@angular/core';
import { User } from '../common/user.model';
import { LoginService } from './login.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
providers: [LoginService]
})
export class LoginComponent implements OnInit {
private usuario: User = new User();
msg: string;
constructor(private service: LoginService) { }
ngOnInit() {
}
login() {
this.service.fazerLogin(this.usuario);
}
limpar() {
this.usuario.nome = '';
this.usuario.senha = '';
}
}
import { Injectable } from '@angular/core';
import { User } from '../common/user.model';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Router } from '@angular/router';
@Injectable()
export class LoginService {
url = 'api';
constructor(private http: HttpClient,
private router: Router
) { }
isAuthenticated = false;
doLogin(user: User) {
if (user.name === 'admin' && user.pass === 'admin') {
this.isAuthenticated = true;
this.router.navigate(['/principal']);
} else {
console.log('Auth Failed');
}
}
userIsAuthenticated() {
return this.isAuthenticated;
}
}
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { PrincipalComponent } from './principal/principal.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { PendenciasComponent } from './pendencias/pendencias.component';
import { TesteComponent } from './teste/teste.component';
import { AuthGuard } from './guards/auth.guard';
const appRoutes: Routes = [
{ path: '', component: LoginComponent},
{ path: 'login', component: LoginComponent },
{ path: 'principal', component: PrincipalComponent,
canActivate: [AuthGuard],
children: [
{ path: 'pendencias', component: PendenciasComponent,
canActivate: [AuthGuard]
},
{ path: 'teste', component: TesteComponent,
canActivate: [AuthGuard]
},
]
},
{ path: '**', component: PageNotFoundComponent },
];
export const routing = RouterModule.forRoot(appRoutes);
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { LoginService } from '../login/login.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor (private loginService: LoginService,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | boolean {
// if (this.loginService.usuarioEstaAutenticado()) {
if (this.loginService.isAuthenticated) {
console.log('canActivate retornou true');
return true;
}
this.router.navigate(['/login']);
console.log(this.loginService.isAuthenticated);
console.log('canActivate retornou false');
return false;
}
}
应用程序路由.ts
import { Component, OnInit } from '@angular/core';
import { User } from '../common/user.model';
import { LoginService } from './login.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
providers: [LoginService]
})
export class LoginComponent implements OnInit {
private usuario: User = new User();
msg: string;
constructor(private service: LoginService) { }
ngOnInit() {
}
login() {
this.service.fazerLogin(this.usuario);
}
limpar() {
this.usuario.nome = '';
this.usuario.senha = '';
}
}
import { Injectable } from '@angular/core';
import { User } from '../common/user.model';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Router } from '@angular/router';
@Injectable()
export class LoginService {
url = 'api';
constructor(private http: HttpClient,
private router: Router
) { }
isAuthenticated = false;
doLogin(user: User) {
if (user.name === 'admin' && user.pass === 'admin') {
this.isAuthenticated = true;
this.router.navigate(['/principal']);
} else {
console.log('Auth Failed');
}
}
userIsAuthenticated() {
return this.isAuthenticated;
}
}
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { PrincipalComponent } from './principal/principal.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { PendenciasComponent } from './pendencias/pendencias.component';
import { TesteComponent } from './teste/teste.component';
import { AuthGuard } from './guards/auth.guard';
const appRoutes: Routes = [
{ path: '', component: LoginComponent},
{ path: 'login', component: LoginComponent },
{ path: 'principal', component: PrincipalComponent,
canActivate: [AuthGuard],
children: [
{ path: 'pendencias', component: PendenciasComponent,
canActivate: [AuthGuard]
},
{ path: 'teste', component: TesteComponent,
canActivate: [AuthGuard]
},
]
},
{ path: '**', component: PageNotFoundComponent },
];
export const routing = RouterModule.forRoot(appRoutes);
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { LoginService } from '../login/login.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor (private loginService: LoginService,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | boolean {
// if (this.loginService.usuarioEstaAutenticado()) {
if (this.loginService.isAuthenticated) {
console.log('canActivate retornou true');
return true;
}
this.router.navigate(['/login']);
console.log(this.loginService.isAuthenticated);
console.log('canActivate retornou false');
return false;
}
}
auth.guard.ts
import { Component, OnInit } from '@angular/core';
import { User } from '../common/user.model';
import { LoginService } from './login.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
providers: [LoginService]
})
export class LoginComponent implements OnInit {
private usuario: User = new User();
msg: string;
constructor(private service: LoginService) { }
ngOnInit() {
}
login() {
this.service.fazerLogin(this.usuario);
}
limpar() {
this.usuario.nome = '';
this.usuario.senha = '';
}
}
import { Injectable } from '@angular/core';
import { User } from '../common/user.model';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Router } from '@angular/router';
@Injectable()
export class LoginService {
url = 'api';
constructor(private http: HttpClient,
private router: Router
) { }
isAuthenticated = false;
doLogin(user: User) {
if (user.name === 'admin' && user.pass === 'admin') {
this.isAuthenticated = true;
this.router.navigate(['/principal']);
} else {
console.log('Auth Failed');
}
}
userIsAuthenticated() {
return this.isAuthenticated;
}
}
import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { PrincipalComponent } from './principal/principal.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { PendenciasComponent } from './pendencias/pendencias.component';
import { TesteComponent } from './teste/teste.component';
import { AuthGuard } from './guards/auth.guard';
const appRoutes: Routes = [
{ path: '', component: LoginComponent},
{ path: 'login', component: LoginComponent },
{ path: 'principal', component: PrincipalComponent,
canActivate: [AuthGuard],
children: [
{ path: 'pendencias', component: PendenciasComponent,
canActivate: [AuthGuard]
},
{ path: 'teste', component: TesteComponent,
canActivate: [AuthGuard]
},
]
},
{ path: '**', component: PageNotFoundComponent },
];
export const routing = RouterModule.forRoot(appRoutes);
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { LoginService } from '../login/login.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor (private loginService: LoginService,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | boolean {
// if (this.loginService.usuarioEstaAutenticado()) {
if (this.loginService.isAuthenticated) {
console.log('canActivate retornou true');
return true;
}
this.router.navigate(['/login']);
console.log(this.loginService.isAuthenticated);
console.log('canActivate retornou false');
return false;
}
}
从'@angular/core'导入{Injectable};
从'@angular/Router'导入{CanActivate,ActivatedRouteSnapshot,RouterStateSnashot,CanActivateChild,Router};
从“rxjs”导入{Observable};
从“../login/login.service”导入{LoginService};
@注射的({
providedIn:'根'
})
导出类AuthGuard实现了CanActivate{
构造函数(专用登录服务:登录服务、,
专用路由器
) {}
激活(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnapshot):可观察的|布尔值{
//if(this.loginService.usuarioEstaAutenticado()){
if(this.loginService.isAuthenticated){
log('canActivate returnou true');
返回true;
}
this.router.navigate(['/login']);
console.log(this.loginService.isAuthenticated);
log('canActivate returnou false');
返回false;
}
}
如果您还需要将Login服务注入auth guard,请不要让组件提供Login服务。如果您这样做,您的服务将不会是单例的,我认为在这里您希望组件和guard之间共享实例。让模块提供的Login服务变得很好:),可以随意标记(或不标记)这是结束主题的答案