programing

Larravel 컨트롤러에서 Header Authorization 키를 가져오시겠습니까?

itmemos 2023. 9. 19. 20:50
반응형

Larravel 컨트롤러에서 Header Authorization 키를 가져오시겠습니까?

API를 만들기 위한 컨트롤러에서 헤더 승인 키를 가져오려고 합니다.바이올린 연주자로부터 요청을 받고 있습니다.

$headers = apache_request_headers();

그리고 $header에는 배열이 포함되어 있습니다.

Array
(
    [User-Agent] => Fiddler
    [Host] => localhost:8000
    [Content-Length] => 102
    [Authorization] => TestKey
)

Authorization을 가져오려고 이와 같이 시도하는 경우, 이는 던지는 오류입니다.

$header['Authorization]

오류:

Undefined index: Authorization

허가를 받기 위해 여러 가지 방법을 시도했지만 아무 것도 작동하지 않았습니다.이것을 가져올 방법이 있습니까?

요청에서 헤더를 가져오려면 Request 클래스를 사용해야 합니다.

public function yourControllerFunction(\Illuminate\Http\Request $request)
{
    $header = $request->header('Authorization');

    // do some stuff
}

https://laravel.com/api/5.5/Illuminate/Http/Request.html#method_header 참조

오래된 주제이긴 하지만 누군가에게 유용할 수도...
새로운 Laravel 버전에서는 호출을 통해 베어러 Authorization 토큰을 직접 얻을 수 있습니다.Illuminate\Http\RequestbearerToken()방법:

Auth::viaRequest('costom-token', function (Request $request) {
    $token = $request->bearerToken();
    // ...
});

또는 컨트롤러에서 직접 다음을(를) 사용할 수 있습니다.

public function index(Request $request) {
    Log::info($request->bearerToken());
    // ...
}

"JWT" 또는 "sanctum"과 같은 특정 패키지를 사용하는 경우 자체 미들웨어를 사용하여 사용자 정보를 검색할 수 있습니다.

또한 Laravel은 다음과 같은 권한 키를 얻을 수 있는 많은 방법을 제공합니다.

  • $request->bearerToken();'베어러' 단어 없이 토큰만 받으면 결과는 다음과 같습니다.44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3.
  • $request->header('Authorization');완전한 키를 손에 쥐다시피Bearer 44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3

추신: 사용하실 수 있습니다.request() 사용하지 않고 바로 가기$request변수

작곡가를 통해 jwt(JSON Web Token Authentication for Laravel & Lumen) http://jwt-auth.com 를 설치해 볼 수 있습니다.

그리고 헤더 요청에 토큰 키가 존재하는지 확인하는 미들웨어를 만듭니다.

jwt를 설치한 후 미들웨어는 다음과 같을 수 있습니다.

<?php

namespace App\Http\Middleware;

use Closure;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;

class VerifyJWTToken
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        try {
            $user = JWTAuth::toUser($request->header('token'));

        } catch (JWTException $e) {
            if ($e instanceof TokenExpiredException) {
                return response()->json([
                    'error' => 'token_expired',
                    'code' => $e->getStatusCode()
                ], $e->getStatusCode());
            } 
            else if($e instanceof TokenInvalidException){
                return response()->json([
                    'error' => "token_invalid",
                    'code' => $e->getStatusCode()
                ], $e->getStatusCode());
            } 
            else {
                return response()->json([
                    'error' => 'Token is required',
                    'code' => $e->getStatusCode(),

                ], $e->getStatusCode());
            }
        }

        return $next($request);
    }
}

예를 들어, 토큰을 헤더 키에 사용했지만, 원하는 대로 이름을 지정할 수 있습니다.

그럼 아무 컨트롤러에서나 이걸 사용할 수 있겠군요

$_SERVER로 파일이나 컨트롤러에서 헤더를 가져오는 간단한 방법이 있습니다.

print_r($_SERVER); // check your header here

그러면 간단히 헤더를 얻을 수 있습니다.

$AuthToken = $_SERVER['HTTP_AUTHORIZATION'];

언급URL : https://stackoverflow.com/questions/37001665/get-header-authorization-key-in-laravel-controller

반응형