FitTech
@FitTech

Как добавлять токен в retrofit-php?

У кого был опыт работы с 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 параметр, может кто с этим сталкивался, как Вы решали такое?
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы