【问题标题】:Get Header Authorization key in laravel controller?在 laravel 控制器中获取标题授权密钥?
【发布时间】:2016-08-28 08:28:19
【问题描述】:

尝试在控制器中获取 标头授权密钥 以制作 APIfiddler 发出请求。

$headers = apache_request_headers();

$header 包含一个数组。

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

如果我尝试这样获取 Authorization ,它的抛出错误。

$header['Authorization]

错误

Undefined index: Authorization

尝试了很多方法来获得授权,但没有任何效果。有没有办法获取这个?

【问题讨论】:

    标签: php laravel laravel-5 authorization


    【解决方案1】:

    要从请求中获取标头,您应该使用 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

    【讨论】:

      【解决方案2】:

      虽然这是一个老话题,但它可能对某些人有用...
      在新的 Laravel 版本中,可以通过调用 Illuminate\Http\RequestbearerToken() 方法直接获取不记名授权令牌:

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

      或直接来自控制器:

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

      【讨论】:

        【解决方案3】:

        如果您使用特定的包,例如“JWT”或“sanctum”,您可以使用他们自己的中间件来检索用户信息。

        此外,Laravel 提供了许多获取授权密钥的方法,例如:

        • $request->bearerToken(); 仅获取没有“Bearer”字样的令牌,结果将类似于44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3
        • $request->header('Authorization'); 获取完整密钥,如 Bearer 44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3

        附:您可以使用request() shortcut 而不是使用$request 变量

        【讨论】:

          【解决方案4】:

          您可以尝试通过 composer 安装 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);
              }
          }
          

          例如,我使用令牌作为标题键,但您可以随意命名。

          然后你可以在任何控制器上使用它

          【讨论】:

            【解决方案5】:

            有一种简单的方法可以使用 $_SERVER 获取任何文件或控制器中的标头。

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

            然后,您可以简单地获取您的标题:

            $AuthToken = $_SERVER['HTTP_AUTHORIZATION'];
            

            【讨论】:

              猜你喜欢
              • 2013-04-03
              • 1970-01-01
              • 2021-01-14
              • 2022-11-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-08-17
              相关资源
              最近更新 更多