0
인증을 위해 Angular2 및 Auth0을 사용하고 있습니다. 토큰이 로컬 저장소에 저장되는 것을 볼 수 있습니다. auth.service.ts 파일에 유효한 토큰을 확인한 다음 해당 구성 요소의 init에서 해당 함수를 호출하는 함수를 작성했습니다. 이 함수의 여러 변형을 시도했지만 올바르게 유효성 검사를 수행 할 수 없습니다.토큰이 유효하지 않은 경우 리디렉션
로그인 한 후에도 유효한 토큰을 검색하고 로그인 할 때에도 홈 페이지로 다시 전달됩니다.
나의 목표는 유효한 토큰없이이 페이지에 액세스하는 것을 허용하는 것입니다. 그러나 유효한 토큰이있을 때이 페이지에 대한 액세스를 허용합니다.
이 내가 현재 시도 것입니다,
auth.service.ts
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { tokenNotExpired, JwtHelper } from 'angular2-jwt';
import { myConfig } from './auth.config';
// Avoid name not found warnings
declare var Auth0Lock: any;
var options = {
theme: {
logo: '../assets/img/logo.png',
primaryColor: '#779476'
},
auth: {
responseType: 'token',
redirect: true,
redirectUrl: "http://localhost:3000/dashboard",
},
languageDictionary: {
emailInputPlaceholder: "[email protected]",
title: "Login or SignUp"
},
};
@Injectable()
export class Auth {
// Configure Auth0
lock = new Auth0Lock(myConfig.clientID, myConfig.domain, options,{});
constructor(private router: Router) {
// Add callback for lock `authenticated` event
this.lock.on('authenticated', (authResult) => {
localStorage.setItem('jwtToken', authResult.idToken);
});
}
public login() {
this.lock.show();
};
public authenticated() {
return tokenNotExpired();
};
public isAuthenticated(): boolean {
try {
var jwtHelper: JwtHelper = new JwtHelper();
var token = this.accessToken;
if (jwtHelper.isTokenExpired(token))
return false;
return true;
}
catch (err) {
return false;
}
}
private get accessToken(): string {
return localStorage.getItem('jwtToken');
}
public logout() {
localStorage.removeItem('jwtToken');
};
}
guard.service.ts
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Auth } from './auth.service';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class Guard implements CanActivate {
constructor(protected router: Router, protected auth: Auth) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
if (state.url !== '/pages/home' && !this.auth.isAuthenticated()) {
this.auth.logout();
this.router.navigate(['/pages/home']);
return false;
}
return true;
}
}
app.routing.ts
import {Guard} from "./services/guard.service";
const appRoutes: Routes = [
{
path: '',
redirectTo: 'pages/home',
pathMatch: 'full',
},
{
path: '',
component: FullLayoutComponent,
canActivate: [Guard],
data: {
title: 'Home'
},
children: [
{
path: 'dashboard',
component: DashboardComponent,
data: {
title: 'Dashboard'
}
},
app.module.ts
import { Guard } from "./services/guard.service";
import { Auth } from "./services/auth.service";
providers: [
Guard,
Auth
],
을 설정합니다. 나는 이것을보고, 무슨 일이 일어나고 있는지 이해하려고 노력하고있다. 일단 내가 이것을 가져 오면 일을 가져올 필요가있는 바로 그 장소에 넣을 것입니다. 접근법은 auth0에 내장 된 객체를 토큰으로 사용합니까? – wuno
@wuno 현재 예제에서 jwtHelper에 angular2-jwt를 사용했는데, 어떤 라이브러리를 tokenNotExpired 함수에 사용하고 계신지 알려 주실 수 있습니까? –
'angular2-jwt'에서이 하나의 import {tokenNotExpired}를 사용하고 있습니다. in my auth.service.ts – wuno