尝试在控制器中获取标头授权密钥以制作 API 。请求来自 fiddler 。
$headers = apache_request_headers();
$ header 包含一个数组。
Array
(
[User-Agent] => Fiddler
[Host] => localhost:8000
[Content-Length] => 102
[Authorization] => TestKey
)
如果我尝试这样来获取授权,则会抛出错误。
$header['Authorization]
错误:
Undefined index: Authorization
尝试了许多获得授权的方法,但没有做任何工作。有没有办法取这个?
答案 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
变量