У кого был опыт работы с
github.com/tebru/retrofit-php подскажите, пожалуйста, как для запросов добавлять заголовок с bearer токеном?
Например, я добавил свой annotation handler BearerAuthenticatedHandler
$retrofit = Retrofit::builder()
->setBaseUrl('host')
->setHttpClient(new Guzzle6HttpClient(new Client()))
->addConverterFactory(new GsonConverterFactory(Gson::builder()->build()))
->addAnnotationHandler(BearerAuthenticated::class, new BearerAuthenticatedHandler())
->build();
$userService = $retrofit->create(UserClient::class);
$user = $userService ->auth('login', 'pass')->execute();
$token = $user->body()->token;
Получил токен и хочу в $userService вызвать метод для которого нужно передавать токен.
$userService ->create('login', 'password', 'name', $token)->execute();
Как это работает(вот метод для create):
/**
* @POST("/api/v1/user/create")
* @BearerAuthenticated("token")
* ...........................
*
* @return Call
*/
public function create($login, $pass, $name, string $token): Call;
Токен берется из параметров и вставляется в BearerAuthenticated, а BearerAuthenticatedHandler обрабатывает и добавляю токен в headers:
final class BearerAuthenticatedParamHandler extends AbstractParameterHandler
{
/**
* @var Converter
*/
private Converter $converter;
/**
* @var string
*/
private string $name;
/**
* Constructor
*
* @param Converter $converter
* @param string $name
*/
public function __construct(Converter $converter, string $name)
{
$this->converter = $converter;
$this->name = $name;
}
/**
* Set a value to the [@see RequestBuilder] for parameter type
*
* @param RequestBuilder $requestBuilder
* @param mixed $value
* @return void
* @throws \RuntimeException
*/
public function apply(RequestBuilder $requestBuilder, $value): void
{
if ($value === null) {
return;
}
$requestBuilder->addHeader('Authorization', 'Bearer ' . $value);
}
}
Но таких методов много и не хочется в каждый метод добавлять $token параметр, может кто с этим сталкивался, как Вы решали такое?