如何从Laravel中的请求中获取Bearer令牌

时间:2017-11-07 12:52:53

标签: php laravel jwt

我期待来自所有传入请求的JWT令牌,它应该包含在请求标头中,例如:Authorization => 'Bearer: some token here'

我想获得此令牌并验证它:这是我正在尝试的内容:

$token = $request->header('Authorization');

这就是我得到的:

"Authorization: Bearer: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJleGFtcGxlLm9yZyIsImF1ZCI6ImV4YW1wbGUuY29tIiwiaWF0IjoxMzU2OTk5NTI0LCJuYmYiOjEzNTcwMDAwMDB9.UQUJV7KmNWPiwiVFAqr4Kx6O6yd69lfbtyWF8qa8iMN2dpZZ1t6xaF8HUmY46y9pZN76f5UMGA0p_CMqymRdYfNiKsiTd2V_3Qpt9LObaLg6rq18j3GLHfdr8nyBzO3v7gTpmNaU6Xy47aMDsbcs593Lx_lD3PnO41oEHgih7CsRKW1WcW1radnpEhdDO7-GpmGOF6xUnpAlQ9EHqpqnIlZPbVoJg92Iwozn-07uuWrkyKUpYN4IPpstd1ks3cKlJ6FH-2ROiC4N0MVLxp4lhUyKhLdwgDWYH4tjtdrEVK0a3_zVtK1ukvriEJqMkfYHnE6Bwv_pv_-lRNy_y7m-YQ"

问题是有没有办法只抓取不包括"Authorization: Bearer"的令牌   当然我可以解析整个字符串并获取令牌,但我只是想知道是否有其他方法可以在不解析的情况下获取它。

6 个答案:

答案 0 :(得分:25)

bearerToken()对象上有一个Illuminate\Http\Request方法,所以你应该只能做$token = $request->bearerToken();并取回你的期望(那是在Laravel 5.5中 - 我不是确保以前的版本。)

答案 1 :(得分:1)

方法bearerToken()是Laravel 5.2引入的。您可以使用: $token = $request->bearerToken();获取令牌。如果您打算从标题中获取令牌,并将其文本从“ Bearer”更改为其他内容,则可以定义自己的函数,如下所示:

  public function bearerToken()
  {
       $header = $this->header('Authorization', '');
       if (Str::startsWith($header, 'Bearer ')) {
           return Str::substr($header, 7);
       }
  }

答案 2 :(得分:0)

如果你使用auth:api不需要设置警卫名称' api'

\Auth::guard('api')->getTokenForRequest();

答案 3 :(得分:0)

要在API调用中从Header获取Bearer令牌,我使用了以下方法。 它在Laravel 6.6.0中为我工作

$request = request();
$token = $request->bearerToken();

希望这对您有用。

  

在Laravel 6.6.0中使用

答案 4 :(得分:-1)

你可以使用substr()php函数来获取令牌。

$string = "Authorization: Bearer: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJleGFtcGxlLm9yZyIsImF1ZCI6ImV4YW1wbGUuY29tIiwiaWF0IjoxMzU2OTk5NTI0LCJuYmYiOjEzNTcwMDAwMDB9.UQUJV7KmNWPiwiVFAqr4Kx6O6yd69lfbtyWF8qa8iMN2dpZZ1t6xaF8HUmY46y9pZN76f5UMGA0p_CMqymRdYfNiKsiTd2V_3Qpt9LObaLg6rq18j3GLHfdr8nyBzO3v7gTpmNaU6Xy47aMDsbcs593Lx_lD3PnO41oEHgih7CsRKW1WcW1radnpEhdDO7-GpmGOF6xUnpAlQ9EHqpqnIlZPbVoJg92Iwozn-07uuWrkyKUpYN4IPpstd1ks3cKlJ6FH-2ROiC4N0MVLxp4lhUyKhLdwgDWYH4tjtdrEVK0a3_zVtK1ukvriEJqMkfYHnE6Bwv_pv_-lRNy_y7m-YQ";

$token = substr($string, 23);

echo $token;

答案 5 :(得分:-1)

您可以执行以下操作:

$response = explode(':', $request->header('Authorization'));
$token = trim($response[2]);