我正在使用Auth0
和angular2-jwt
进行登录,我正在尝试实施CanActivate以在用户登录时阻止路由。
我已经在navbar.component中实现了登录代码,并试图弄清楚如何使其更加模块化。我有一些服务的例子,但没有一个符合这种情况,所以这就是我来到这里的原因。
所以我认为有两个步骤:
我希望有人会给我一个解决方案,我可以从中吸取教训。 谢谢。
Navbar.component.ts:
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES, CanActivate } from '@angular/router';
import {tokenNotExpired, JwtHelper} from 'angular2-jwt';
declare var Auth0Lock;
@Component({
moduleId: module.id,
selector: 'navbar',
template : `
<button *ngIf="!loggedIn()" (click)="login()">Login</button>
<button *ngIf="loggedIn()" (click)="logout()">Logout</button>
<a *ngIf="loggedIn()" [routerLink]="['/users']">Users</a>
<button *ngIf="!loggedIn()" (click)="login()" class="btn btn-danger">Login</button>
<button *ngIf="loggedIn()" (click)="logout()" class="btn btn-default">Logout</button>
`,
directives: [ROUTER_DIRECTIVES]
})
export class NavbarComponent{
lock = new Auth0Lock('xxxxxxxxxxxxxxxxx','yyyyyyyyyyyyyy')
jwtHelper: JwtHelper = new JwtHelper();
location: Location;
profile : any;
constructor(){
this.profile = JSON.parse(localStorage.getItem('profile'));
}
login(){
var self = this;
this.lock.show((err: string, profile: string, id_token: string) =>{
if (err){
throw new Error(err);
}
localStorage.setItem('profile', JSON.stringify(profile));
localStorage.setItem('id_token', id_token);
self.loggedIn();
});
}
logout(){
localStorage.removeItem('profile');
localStorage.removeItem('id_token');
this.loggedIn();
}
loggedIn(){
return tokenNotExpired();
}
}
auth.guard.ts:
import { CanActivate } from '@angular/router';
export class AuthGuard implements CanActivate {
canActivate() {
return true;
}
}
app.routes.ts
import { provideRouter, RouterConfig } from '@angular/router';
import {UsersComponent} from './users/users.component';
import {AuthGuard} from './navbar/auth.guard';
export const routes: RouterConfig = [
{ path: 'users', component: UsersComponent, canActivate: [AuthGuard] },
];
export const APP_ROUTER_PROVIDERS = [
provideRouter(routes),
AuthGuard
];
答案 0 :(得分:0)
喜欢解决方案httplib2
:
Auth.Guard.ts
import { CanActivate } from '@angular/router';
import { tokenNotExpired } from 'angular2-jwt';
export class AuthGuard implements CanActivate {
canActivate() {
if (tokenNotExpired()) {
return true;
}
}
}