[〜#〜] 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
認可を得るために多くの方法を試しましたが、何も機能しませんでした。これを取得する方法はありますか?
リクエストからヘッダーを取得するには、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
古いトピックですが、誰かに役立つかもしれません...
新しいLaravelバージョンでは、Illuminate\Http\Request
のbearerToken()
メソッドを呼び出すことにより、ベアラー認証トークンを直接取得できます。
Auth::viaRequest('costom-token', function (Request $request) {
$token = $request->bearerToken();
// ...
});
または、コントローラーから直接:
public function index(Request $request) {
Log::info($request->bearerToken());
// ...
}
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);
}
}
たとえば、ヘッダーキーにトークンを使用しましたが、好きなように名前を付けることができます。
次に、これを任意のコントローラーで使用できます