在 laravel 控制器中获取 Header 授权密钥?
Get Header Authorization key in laravel controller?
正在尝试在控制器中获取 header 授权密钥 以创建 API。请求来自 fiddler.
$headers = apache_request_headers();
并且 $header 包含一个数组。
Array
(
[User-Agent] => Fiddler
[Host] => localhost:8000
[Content-Length] => 102
[Authorization] => TestKey
)
如果我这样尝试获取 Authorization ,它会抛出错误。
$header['Authorization]
错误:
Undefined index: Authorization
尝试了很多方法获得授权,但没有任何效果。有什么方法可以获取这个吗?
要从请求中获取 headers,您应该使用请求 class
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 版本中,可以通过调用 Illuminate\Http\Request
的 bearerToken()
方法直接获取持有者授权令牌:
Auth::viaRequest('costom-token', function (Request $request) {
$token = $request->bearerToken();
// ...
});
或直接从控制器:
public function index(Request $request) {
Log::info($request->bearerToken());
// ...
}
您可以尝试通过 composer 安装 jwt(JSON Web Token Authentication for Laravel & Lumen)http://jwt-auth.com。
并创建一个中间件来验证 header 请求中是否存在您的令牌密钥。
安装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);
}
}
例如,我使用令牌作为 header 密钥,但您可以随意命名它。
然后你可以在任何控制器上使用它
有一种简单的方法可以使用 $_SERVER 在任何文件或控制器中获取 headers。
print_r($_SERVER); // check your header here
然后,您可以简单地获取 header:
$AuthToken = $_SERVER['HTTP_AUTHORIZATION'];
如果您使用像“JWT" or "sanctum”这样的特定包,您可以使用他们自己的中间件来检索用户信息。
此外,Laravel 提供了多种获取授权密钥的方法,例如:
$request->bearerToken();
仅获取没有“Bearer”字样的令牌,结果将类似于 44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3
.
$request->header('Authorization');
获取完整密钥,如 Bearer 44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3
P.S。您可以使用 request()
shortcut 而不是使用 $request
变量
正在尝试在控制器中获取 header 授权密钥 以创建 API。请求来自 fiddler.
$headers = apache_request_headers();
并且 $header 包含一个数组。
Array
(
[User-Agent] => Fiddler
[Host] => localhost:8000
[Content-Length] => 102
[Authorization] => TestKey
)
如果我这样尝试获取 Authorization ,它会抛出错误。
$header['Authorization]
错误:
Undefined index: Authorization
尝试了很多方法获得授权,但没有任何效果。有什么方法可以获取这个吗?
要从请求中获取 headers,您应该使用请求 class
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 版本中,可以通过调用 Illuminate\Http\Request
的 bearerToken()
方法直接获取持有者授权令牌:
Auth::viaRequest('costom-token', function (Request $request) {
$token = $request->bearerToken();
// ...
});
或直接从控制器:
public function index(Request $request) {
Log::info($request->bearerToken());
// ...
}
您可以尝试通过 composer 安装 jwt(JSON Web Token Authentication for Laravel & Lumen)http://jwt-auth.com。
并创建一个中间件来验证 header 请求中是否存在您的令牌密钥。
安装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);
}
}
例如,我使用令牌作为 header 密钥,但您可以随意命名它。
然后你可以在任何控制器上使用它
有一种简单的方法可以使用 $_SERVER 在任何文件或控制器中获取 headers。
print_r($_SERVER); // check your header here
然后,您可以简单地获取 header:
$AuthToken = $_SERVER['HTTP_AUTHORIZATION'];
如果您使用像“JWT" or "sanctum”这样的特定包,您可以使用他们自己的中间件来检索用户信息。
此外,Laravel 提供了多种获取授权密钥的方法,例如:
$request->bearerToken();
仅获取没有“Bearer”字样的令牌,结果将类似于44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3
.$request->header('Authorization');
获取完整密钥,如Bearer 44|9rJp2TWvTTpWy535S1Rq2DF0AEmYbEotwydkYCZ3
P.S。您可以使用 request()
shortcut 而不是使用 $request
变量