Symfony 2: ручной вход и Json Web Token

У меня проблема с моим текущим проектом.
Я использовал Symfony 2.6, этот проект — API, вызываемый моим клиентом.
Процесс аутентификации и входа в систему очень специфичен, он использует промежуточное программное обеспечение (другой веб-сайт).

Я добавляю пакет под названием JWTAuthenticationWebToken
Поэтому мне нужно вручную войти в систему пользователя из-за использования промежуточного программного обеспечения.
Я правильно установил пакет и добавил правильные настройки, но этот пользовательский провайдер никогда не вызывался.

Как это реализовать при ручном входе?

Мой контроллер:

<?php $token = new UsernamePasswordToken($user, null, "login", $user->getRoles());
$this->get("security.context")->setToken($token); //now the user is logged in
//now dispatch the login event
$request = $this->get("request");
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event); ?>

security.yml

firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern:  ^/(_(profiler|wdt)|css|images|js)/
security: false
# the login page has to be accessible for everybody
demo_login:
pattern:  ^/demo/secured/login$
security: false
login:
pattern:   /api/user/uber/f6d75c949cda2517b826cacba5523792
stateless: true
anonymous: true
form_login:
check_path:               /api/user/uber/f6d75c949cda2517b826cacba5523792
success_handler:          lexik_jwt_authentication.handler.authentication_success
failure_handler:          lexik_jwt_authentication.handler.authentication_failure
require_previous_session: false

api:
pattern:   ^/(api)
stateless: true
lexik_jwt: ~

Я также написал два файла «ApiKeyAuthenticator» и «ApiKeyUserProvider», как упомянуто здесь для ручной аутентификации.
http://symfony.com/doc/current/cookbook/security/api_key_authentication.html

РЕДАКТИРОВАТЬ :
Я также создал слушателей, упомянутых в LexikJWTAuthenticationBundle doc ‘

в чем дело ? 🙁

Спасибо за вашу помощь

3

Решение

После большого количества поиска (google, stackoverflow, примеры приложений, документация пакета, …) кажется, что не было предложено решение для аутентификации пользователей вручную с контроллера.

Также мне пришлось открыть исходный код, найти какой метод вызывается для генерации токена при успешном событии аутентификации (исходный код) и, наконец, адаптировать код к моим потребностям (регистрация / вход пользователя в API по ответу на вход в Facebook в мобильном приложении).

Моя альтернатива:

// SecurityController.php

protected function generateToken($user, $statusCode = 200)
{
// Call jwt_manager service & create the token
$token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user);

// If you want, add some user informations
$userInformations = array(
'id'         => $user->getId(),
'username'   => $user->getUsername(),
'email'      => $user->getEmail(),
'roles'      => $user->getRoles(),
);

// Build your response
$response = array(
'token' => $token,
'user'  => $user,
);

// Return the response in JSON format
return new JsonResponse($response, $statusCode);
}

Токен будет возвращен так же, как классический обработчик login_check, и будет иметь то же время до истечения срока действия.

Надеюсь, что эта помощь для следующих пользователей.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]