У меня проблема с моим текущим проектом.
Я использовал 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 ‘
в чем дело ? 🙁
Спасибо за вашу помощь
После большого количества поиска (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, и будет иметь то же время до истечения срока действия.
Надеюсь, что эта помощь для следующих пользователей.
Других решений пока нет …