symfony не получать токен в заголовке - PullRequest
0 голосов
/ 23 марта 2020

Я решаю проблему с помощью jwt. на самом деле я использую angular для использования API, созданного с Symfony 3.4, и он генерирует токен, но когда я отправляю его, я устанавливаю заголовок с перехватчиком, как этот.

import {Injectable} from '@angular/core';
import {HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
import {LoginService} from '../../services/authServices/login.service';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

    constructor(private auth: LoginService) {}

    intercept(req: HttpRequest<any>, next: HttpHandler) {

        if (req.url.indexOf('/admin') !== -1) {
            const authToken: string = `Bearer ${this.auth.getJwtToken()}`;

            if (authToken) {
                console.log('sending token to perform API fetch...');

                const authReq = req.clone({ setHeaders: { 'Authorization': authToken, 'Content-Type': 'application/json'} });
                console.log(authReq);

                return next.handle(
                    authReq
                );
            }

        }

        return next.handle(req);
    }
}

, но Symfony возвращает ответ 401 не авторизован, когда я пытался извлечь ресурсы из защищенного маршрута, похоже, что Symfony также не извлекает токен

это мой конфигурационный файл lexik jwt, на котором я Symfony 3.4

lexik_jwt_authentication:
    private_key_path:       '%kernel.project_dir%/config/jwt/private.pem' # required for token creation
    public_key_path:       '%kernel.project_dir%/config/jwt/private.pem'  # required for token verification
    pass_phrase:      "%user_pass%" # required for token creation, usage of an environment variable is recommended
    token_ttl:        3600
    user_identity_field: id  # key under which the user identity will be stored in the token payload
    clock_skew: 0

    # token encoding/decoding settings
    encoder:
        # token encoder/decoder service - default implementation based on the lcobucci/jwt library
        service:            lexik_jwt_authentication.encoder.lcobucci

        # encryption algorithm used by the encoder service
        signature_algorithm: RS256

    # token extraction settings
    token_extractors:
        # look for a token as Authorization Header
        authorization_header:
            enabled: true
            prefix:  Bearer
            name:    Authorization

        # check token in a cookie
        cookie:
            enabled: false
            name:    BEARER

        # check token in a query string parameter
        query_parameter:
            enabled: false
            name:    bearer

1 Ответ

0 голосов
/ 23 марта 2020

лучший способ использовать Interceptor для пользователей в любых случаях - это поможет

export class ErrorInterceptor implements HttpInterceptor {
intercept (req:HttpRequest<any> , next : HttpHandler): Observable<HttpEvent<any>>{
    return next.handle(req).pipe(
        catchError(error=>{
            if(error instanceof HttpErrorResponse){
                const applicationError = error.headers.get('Application-Error');
                if(applicationError){
                    console.error(applicationError);
                    return throwError(applicationError);
                }
                // Model Error
                const serverError = error.error;
                let modelStateErrors='';
                if(serverError && typeof serverError ==='object'){
                    for(const key in serverError){
                        if(serverError[key]){
                            modelStateErrors += serverError[key] + '\n';
                        }
                    }                      
                }
                // un authorized errors
                if(error.status === 401){
                    return throwError (error.statusText);
                }
                return throwError (modelStateErrors || serverError || 'Server Error')
            }
        })
    )   
}

}

export const ErrorInterceptorProvider = {предоставляет: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...