在laravel控制器中获取Header Authorization键?

时间:2016-05-03 10:27:44

标签: php laravel laravel-5 authorization

尝试在控制器中获取标头授权密钥以制作 API 。请求来自 fiddler

$headers = apache_request_headers();

$ header 包含一个数组。

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

如果我尝试这样来获取授权,则会抛出错误。

$header['Authorization]

错误

Undefined index: Authorization

尝试了许多获得授权的方法,但没有做任何工作。有没有办法取这个?

5 个答案:

答案 0 :(得分:44)

要从请求中获取标头,您应该使用Request类

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

    // do some stuff
}

https://laravel.com/api/5.0/Illuminate/Http/Request.html#method_header

答案 1 :(得分:9)

尽管这是一个古老的话题,但对某些人可能有用...
在新的Laravel版本中,可以通过调用Illuminate\Http\Request的{​​{1}}方法直接获得承载授权令牌:

bearerToken()

或直接从控制器:

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

答案 2 :(得分:0)

您可以尝试通过作曲者安装jwt(用于Laravel和Lumen的JSON Web令牌认证)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);
    }
}

例如,我使用令牌作为标头密钥,但是您可以根据自己的喜好命名。

那么您可以在任何控制器上使用它

答案 3 :(得分:0)

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

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

然后,您只需获取标题:

$AuthToken = $_SERVER['HTTP_AUTHORIZATION'];

答案 4 :(得分:0)

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

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

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

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