Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { BehaviorSubject } from 'rxjs/BehaviorSubject';
- import { Injectable } from '@angular/core';
- import { HttpClient } from '@angular/common/http';
- import { Observable } from 'rxjs/Observable';
- import { map } from 'rxjs/operators';
- function parseJwt(token) {
- if (!token) {
- return null;
- }
- const base64Token = token.split('.')[1];
- const base64 = base64Token.replace(/-/g, '+').replace(/_/g, '/');
- return JSON.parse(window.atob(base64));
- }
- @Injectable()
- export class AuthenticationService {
- private readonly _tokenKey = 'currentUser';
- private _user$: BehaviorSubject<string>;
- private readonly _url = '/API/users';
- public redirectUrl: string;
- constructor(private http: HttpClient) {
- let parsedToken = parseJwt(localStorage.getItem(this._tokenKey));
- if (parsedToken) {
- const expires = new Date(parseInt(parsedToken.exp, 10) * 1000) < new Date();
- if (expires) {
- localStorage.removeItem(this._tokenKey);
- parsedToken = null;
- }
- }
- this._user$ = new BehaviorSubject<string>(parsedToken && parsedToken.username);
- }
- get user$(): BehaviorSubject<string> {
- return this._user$;
- }
- get token(): string{
- const localToken = localStorage.getItem(this._tokenKey);
- return !!localToken ? localToken : '';
- }
- login(username: string, password: string): Observable<boolean> {
- return this.http.post(`/API/users/login`, { username, password }).pipe(
- map((res: any) => {
- const token = res.token;
- if (token) {
- localStorage.setItem(this._tokenKey, token);
- this._user$.next(username);
- return true;
- } else {
- return false;
- }
- })
- );
- }
- register(username: string, password: string): Observable<boolean> {
- return this.http.post(`/API/users/register`, { username, password }).pipe(
- map((res: any) => {
- const token = res.token;
- if (token) {
- localStorage.setItem(this._tokenKey, token);
- this._user$.next(username);
- return true;
- } else {
- return false;
- }
- })
- );
- }
- logout() {
- if (this.user$.getValue()) {
- localStorage.removeItem('currentUser');
- setTimeout(() => this._user$.next(null));
- }
- }
- checkUserNameAvailability(username: string): Observable<boolean> {
- return this.http.post(`/API/users/checkusername`, { username }).pipe(
- map((item: any) => {
- if (item.username === 'alreadyexists') {
- return false;
- } else {
- return true;
- }
- })
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement