@devlearning/jwt-auth
Version:
Jwt Angular Authentication manager with automatic Refresh Token management.
125 lines (97 loc) • 3.04 kB
Markdown
# JwtAuth
Jwt Angular Authentication manager with automatic Refresh Token management.
## Installation
```bash
npm i /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';
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);
})
);
}
}
```