Несанкционированный пользователь перенаправляет на страницу входа - PullRequest
0 голосов
/ 16 октября 2018

Если пользователь не авторизован, его следует перенаправить на страницу входа.Я пробовал код, как показано ниже.Используя этот код, я получаю сообщение об ошибке:

core.js: 1673 ОШИБКА Ошибка: Uncaught (в обещании): InvalidCharacterError: Не удалось выполнить «atob» в «Window»: строка для декодированияне правильно закодирован.

Я не уверен, где проверить эту ошибку.

Кто-нибудь может мне помочь, где я должен внести изменения?

token.service.ts

export class TokenService {

    private iss = {
        login: 'http://localhost:8000/api/login',
        signup: 'http://localhost:8000/api/signup'
    }

    constructor() { }

    setToken(token) {
        localStorage.setItem('token', token);
    }

    getToken() {
        return localStorage.getItem('token');
    }

    isValid() {
        const token = this.getToken();
        if (token) {
            const payload = this.payload(token);
            if (payload) {
                return Object.values(this.iss).indexOf(payload.iss) > -1 ? true : false;
            }
        }
        return false;
    }

    payload(token) {
        const payload = token.split('.')[1];
        return JSON.parse(atob(payload));
    }

    loggedIn() {
        // !! this will return either true or false
        return this.isValid();
    }
}

auth.guard.ts

import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { TokenService } from 'src/app/services/token.service';

@Injectable({
    providedIn: 'root'
})
export class AuthGuard implements CanActivate {

    constructor(private _tokenService: TokenService, private _router: Router) { }

    canActivate(): boolean {
        if (this._tokenService.loggedIn()) {
            return true;
        } else {
            this._router.navigate(['login']);
            return false;
        }
    }
}

token-interceptor.service.ts

import { Injectable, Injector } from '@angular/core';
import { HttpInterceptor } from '@angular/common/http';
import { TokenService } from './token.service';

@Injectable({
    providedIn: 'root'
})
export class TokenInterceptorService implements HttpInterceptor {

    constructor(private injector: Injector) { }

    intercept(req, next) {
        let authService = this.injector.get(TokenService);

        let tokenizedReq = req.clone({
            setHeaders: {
                Authorization: 'Bearer ' + authService.getToken()
            }
        });
        return next.handle(tokenizedReq);
    }
}

app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { SpecialEventsComponent } from './components/special-events/special-events.component';
import { AuthGuard } from './guards/auth.guard';

const routes: Routes = [
    {
        path: 'special',
        component: SpecialEventsComponent,
        canActivate: [AuthGuard]
    },
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...