UNPKG

@devlearning/jwt-auth

Version:

Jwt Angular Authentication manager with automatic Refresh Token management.

125 lines (97 loc) 3.04 kB
# JwtAuth Jwt Angular Authentication manager with automatic Refresh Token management. ## Installation ```bash npm i @devlearning/jwt-auth ``` ## Configuration add to app.module this import: ```js JwtAuthModule.forRoot({ tokenUrl: environment.jwtAuthToken, refreshUrl: environment.jwtAuthRefreshToken, }) ``` jwtAuthToken is the url to otain bearer token. Server response must the same of this class: Example ```js export const environment = { ... jwtAuthToken: '/api/v1/jwtauth/token', jwtAuthRefreshToken: '/api/v1/jwtauth/refreshToken', }; ``` ```js export class JwtToken { username: string; email: string; token: string; expires: moment.Moment; refreshToken: string; refreshTokenExpiration: moment.Moment; } ``` jwtAuthRefreshToken is the url to refresh the bearer token. Server response must the same of previous class. ## Usage to make a login call method "token" of service "JwtAuthService" ```js import { JwtAuthService } from '@devlearning/jwt-auth'; ... constructor( ... private readonly _jwtAuth: JwtAuthService ) { } login() { ... this._jwtAuth.token({username: 'usernameOrEmail field value', password: 'password'}) .pipe( ... ).subscribe(x=> { ... }); ... } ``` In JwtAuthService is available two Observable for monitoring loggedin status: - isLoggedIn$ - jwtToken$ or property with current value - isLoggedIn - jwtToken to use the JwtAuthGuard in canActivate route parameter: - create auth.guard.ts - extends JwtAuthguard class - call method canActivate of base class ```js import { Injectable } from '@angular/core'; import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { JwtAuthGuard, JwtAuthService } from '@devlearning/jwt-auth'; import { Observable } from 'rxjs'; @Injectable() export class AuthGuard extends JwtAuthGuard implements CanActivate { constructor( private readonly _router: Router, private readonly _jwtAuth: JwtAuthService ) { super(_jwtAuth); } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { return this.canActivateBase(route, state) .pipe( map(x => { if (x) { return true; } else { this._router.navigateByUrl('/login'); //your login url return false; } }), catchError(e => { this._router.navigateByUrl('/login'); //your login url return of(false); }) ); } } ```