Получить ключ авторизации заголовка в контроллере laravel?
Попытка получить ключ авторизации заголовка в контроллере для создания API. Запрос делается из fiddler.
$headers = apache_request_headers();
И заголовок $ содержит массив.
Array
(
[User-Agent] => Fiddler
[Host] => localhost:8000
[Content-Length] => 102
[Authorization] => TestKey
)
Если вы пытаетесь сделать это с помощью Авторизация, его ошибка бросания.
$header['Authorization]
Ошибка:
Undefined index: Authorization
Пробовал много способов получить авторизацию, но ничего не работает. Есть ли способ получить это?
Ответы
Ответ 1
Чтобы получить заголовки запроса, вы должны использовать класс 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
Ответ 2
Хотя это старая тема, это может быть полезно для кого-то...
В новых версиях Laravel можно получить токен авторизации на предъявителя, вызвав метод Illuminate\Http\Request
bearerToken()
:
Auth::viaRequest('costom-token', function (Request $request) {
$token = $request->bearerToken();
// ...
});
Или прямо из контроллера:
public function index(Request $request) {
Log::info($request->bearerToken());
// ...
}
Ответ 3
Вы можете попробовать установить jwt (аутентификация веб-токена JSON для 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);
}
}
Я использовал токен, например, для ключа заголовка, но вы можете называть его по своему усмотрению.
Тогда вы можете использовать это на любом контроллере