symfony - Custom Authentication doesn't authenticate the user correctly -
i setting own custom authenticator in symfony 2.6 have got issue. doesn't authenticate user correctly. authenticate @ first fails.
here goes security.yml
security: encoders: mlm\bundle\mlmbundle\entity\empreendedor: algorithm: bcrypt cost: 12 role_hierarchy: role_admin: role_user role_empreendedor: role_user role_super_admin: [role_user, role_admin, role_allowed_to_switch] providers: empreendedor_provider: id: empreendedor.user.provider firewalls: # disables authentication assets , profiler, adapt according needs dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false area_empreendedor_login: pattern: ^/escritorio-virtual/login$ #anonymous: ~ security: false area_empreendedor: pattern: ^/escritorio-virtual provider: empreendedor_provider simple_form: authenticator: empreendedor_authenticator check_path: escritorio_virtual_login_check login_path: escritorio_virtual_login logout: path: escritorio_virtual_logout target: escritorio_virtual_index # these settings can restrict or allow access different parts # of application based on roles, ip, host or methods # http://symfony.com/doc/current/cookbook/security/access_control.html access_control: - { path: ^/escritorio-virtual, roles: role_empreendedor }
my custom authenticator
class empreendedorauthenticator implements simpleformauthenticatorinterface { private $encoder; public function __construct(userpasswordencoderinterface $encoder) { $this->encoder = $encoder; } public function authenticatetoken(tokeninterface $token, userproviderinterface $userprovider, $providerkey) { try { $user = $userprovider->loaduserbyusername($token->getusername()); } catch (usernamenotfoundexception $e) { throw new authenticationexception('invalid username or password. 1'); } $passwordvalid = $this->encoder->ispasswordvalid($user, $token->getcredentials()); if ($passwordvalid) { return new usernamepasswordtoken( $user, $user->getpassword(), $providerkey, $user->getroles() ); } throw new authenticationexception('invalid username or password. 2'); } public function supportstoken(tokeninterface $token, $providerkey) { return $token instanceof usernamepasswordtoken && $token->getproviderkey() === $providerkey; } public function createtoken(request $request, $username, $password, $providerkey) { return new usernamepasswordtoken($username, $password, $providerkey); } }
and log
[2015-06-02 14:46:33] request.info: matched route "escritorio_virtual_login_check" (parameters: "_controller": "mlm\bundle\mlmbundle\controller\escritoriovirtualsecuritycontroller::logincheckaction", "_route": "escritorio_virtual_login_check") [] [] [2015-06-02 14:46:33] security.debug: read securitycontext session [] [] [2015-06-02 14:46:33] security.debug: reloading user user provider. [] [] [2015-06-02 14:46:33] doctrine.debug: select t0.id id1, t0.nome nome2, t0.codigo_indicacao codigo_indicacao3, t0.rua rua4, t0.numero numero5, t0.complemento complemento6, t0.bairro bairro7, t0.cidade cidade8, t0.cep cep9, t0.cpf cpf10, t0.email email11, t0.username username12, t0.telefone_fixo telefone_fixo13, t0.telefone_celular telefone_celular14, t0.telefone_comercial telefone_comercial15, t0.password password16, t0.is_active is_active17, t0.lft lft18, t0.rgt rgt19, t0.criado criado20, t0.atualizado atualizado21, t0.is_enabled is_enabled22, t0.is_account_non_locked is_account_non_locked23, t0.is_account_non_expired is_account_non_expired24, t0.email_confirmado email_confirmado25, t0.email_confirmado_em email_confirmado_em26, t0.aprovado aprovado27, t0.aprovado_em aprovado_em28, t0.aprovado_por aprovado_por29, t0.foto foto30, t0.estado_id estado_id31, t0.patrocinador_id patrocinador_id32 empreendedor t0 t0.email = ? limit 1 ["email@email.com"] [] [2015-06-02 14:46:33] security.debug: username "email@email.com" reloaded user provider. [] [] [2015-06-02 14:46:33] doctrine.debug: select t0.id id1, t0.nome nome2, t0.codigo_indicacao codigo_indicacao3, t0.rua rua4, t0.numero numero5, t0.complemento complemento6, t0.bairro bairro7, t0.cidade cidade8, t0.cep cep9, t0.cpf cpf10, t0.email email11, t0.username username12, t0.telefone_fixo telefone_fixo13, t0.telefone_celular telefone_celular14, t0.telefone_comercial telefone_comercial15, t0.password password16, t0.is_active is_active17, t0.lft lft18, t0.rgt rgt19, t0.criado criado20, t0.atualizado atualizado21, t0.is_enabled is_enabled22, t0.is_account_non_locked is_account_non_locked23, t0.is_account_non_expired is_account_non_expired24, t0.email_confirmado email_confirmado25, t0.email_confirmado_em email_confirmado_em26, t0.aprovado aprovado27, t0.aprovado_em aprovado_em28, t0.aprovado_por aprovado_por29, t0.foto foto30, t0.estado_id estado_id31, t0.patrocinador_id patrocinador_id32 empreendedor t0 t0.email = ? limit 1 ["email@email.com"] [] [2015-06-02 14:46:34] security.info: user "email@email.com" has been authenticated [] [] [2015-06-02 14:46:34] security.debug: fallback default authentication success handler [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\debughandlerslistener::configure". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\profilerlistener::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\dumplistener::configure". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\bundle\frameworkbundle\eventlistener\sessionlistener::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\fragmentlistener::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\routerlistener::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\localelistener::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\translatorlistener::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.request" listener "symfony\component\security\http\firewall::onkernelrequest". [] [] [2015-06-02 14:46:34] event.debug: listener "symfony\component\security\http\firewall::onkernelrequest" stopped propagation of event "kernel.request". [] [] [2015-06-02 14:46:34] event.debug: listener "symfony\bundle\asseticbundle\eventlistener\requestlistener::onkernelrequest" not called event "kernel.request". [] [] [2015-06-02 14:46:34] event.debug: listener "knp\bundle\paginatorbundle\subscriber\slidingpaginationsubscriber::onkernelrequest" not called event "kernel.request". [] [] [2015-06-02 14:46:34] event.debug: listener "stof\doctrineextensionsbundle\eventlistener\blamelistener::onkernelrequest" not called event "kernel.request". [] [] [2015-06-02 14:46:34] security.debug: write securitycontext in session [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\responselistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "symfony\component\security\http\rememberme\responselistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "sensio\bundle\frameworkextrabundle\eventlistener\httpcachelistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\profilerlistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "symfony\bundle\webprofilerbundle\eventlistener\webdebugtoolbarlistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\savesessionlistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\streamedresponselistener::onkernelresponse". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.finish_request" listener "symfony\component\httpkernel\eventlistener\localelistener::onkernelfinishrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.finish_request" listener "symfony\component\httpkernel\eventlistener\translatorlistener::onkernelfinishrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.finish_request" listener "symfony\component\httpkernel\eventlistener\routerlistener::onkernelfinishrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.finish_request" listener "symfony\component\security\http\firewall::onkernelfinishrequest". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.terminate" listener "symfony\bundle\swiftmailerbundle\eventlistener\emailsenderlistener::onterminate". [] [] [2015-06-02 14:46:34] event.debug: notified event "kernel.terminate" listener "symfony\component\httpkernel\eventlistener\profilerlistener::onkernelterminate". [] [] [2015-06-02 14:46:34] request.info: matched route "escritorio_virtual_index" (parameters: "_controller": "symfony\bundle\frameworkbundle\controller\redirectcontroller::urlredirectaction", "path": "/escritorio-virtual/", "permanent": "true", "scheme": "null", "httpport": "80", "httpsport": "443", "_route": "escritorio_virtual_index") [] [] [2015-06-02 14:46:34] security.debug: read securitycontext session [] [] [2015-06-02 14:46:34] security.debug: reloading user user provider. [] [] [2015-06-02 14:46:34] doctrine.debug: select t0.id id1, t0.nome nome2, t0.codigo_indicacao codigo_indicacao3, t0.rua rua4, t0.numero numero5, t0.complemento complemento6, t0.bairro bairro7, t0.cidade cidade8, t0.cep cep9, t0.cpf cpf10, t0.email email11, t0.username username12, t0.telefone_fixo telefone_fixo13, t0.telefone_celular telefone_celular14, t0.telefone_comercial telefone_comercial15, t0.password password16, t0.is_active is_active17, t0.lft lft18, t0.rgt rgt19, t0.criado criado20, t0.atualizado atualizado21, t0.is_enabled is_enabled22, t0.is_account_non_locked is_account_non_locked23, t0.is_account_non_expired is_account_non_expired24, t0.email_confirmado email_confirmado25, t0.email_confirmado_em email_confirmado_em26, t0.aprovado aprovado27, t0.aprovado_em aprovado_em28, t0.aprovado_por aprovado_por29, t0.foto foto30, t0.estado_id estado_id31, t0.patrocinador_id patrocinador_id32 empreendedor t0 t0.email = ? limit 1 ["email@email.com"] [] [2015-06-02 14:46:34] security.debug: username "email@email.com" reloaded user provider. [] [] [2015-06-02 14:46:34] doctrine.debug: select t0.id id1, t0.nome nome2, t0.codigo_indicacao codigo_indicacao3, t0.rua rua4, t0.numero numero5, t0.complemento complemento6, t0.bairro bairro7, t0.cidade cidade8, t0.cep cep9, t0.cpf cpf10, t0.email email11, t0.username username12, t0.telefone_fixo telefone_fixo13, t0.telefone_celular telefone_celular14, t0.telefone_comercial telefone_comercial15, t0.password password16, t0.is_active is_active17, t0.lft lft18, t0.rgt rgt19, t0.criado criado20, t0.atualizado atualizado21, t0.is_enabled is_enabled22, t0.is_account_non_locked is_account_non_locked23, t0.is_account_non_expired is_account_non_expired24, t0.email_confirmado email_confirmado25, t0.email_confirmado_em email_confirmado_em26, t0.aprovado aprovado27, t0.aprovado_em aprovado_em28, t0.aprovado_por aprovado_por29, t0.foto foto30, t0.estado_id estado_id31, t0.patrocinador_id patrocinador_id32 empreendedor t0 t0.email = ? limit 1 ["email@email.com"] [] [2015-06-02 14:46:34] security.info: authentication exception occurred; redirecting authentication entry point (invalid username or password. 2) [] [] [2015-06-02 14:46:34] security.debug: calling authentication entry point [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.exception" listener "symfony\component\security\http\firewall\exceptionlistener::onkernelexception". [] [] [2015-06-02 14:46:35] event.debug: listener "symfony\component\security\http\firewall\exceptionlistener::onkernelexception" stopped propagation of event "kernel.exception". [] [] [2015-06-02 14:46:35] event.debug: listener "symfony\component\httpkernel\eventlistener\profilerlistener::onkernelexception" not called event "kernel.exception". [] [] [2015-06-02 14:46:35] event.debug: listener "symfony\component\httpkernel\eventlistener\exceptionlistener::onkernelexception" not called event "kernel.exception". [] [] [2015-06-02 14:46:35] security.debug: write securitycontext in session [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\responselistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "symfony\component\security\http\rememberme\responselistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "sensio\bundle\frameworkextrabundle\eventlistener\httpcachelistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\profilerlistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "symfony\bundle\webprofilerbundle\eventlistener\webdebugtoolbarlistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\savesessionlistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.response" listener "symfony\component\httpkernel\eventlistener\streamedresponselistener::onkernelresponse". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.finish_request" listener "symfony\component\httpkernel\eventlistener\localelistener::onkernelfinishrequest". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.finish_request" listener "symfony\component\httpkernel\eventlistener\translatorlistener::onkernelfinishrequest". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.finish_request" listener "symfony\component\httpkernel\eventlistener\routerlistener::onkernelfinishrequest". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.finish_request" listener "symfony\component\security\http\firewall::onkernelfinishrequest". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.terminate" listener "symfony\bundle\swiftmailerbundle\eventlistener\emailsenderlistener::onterminate". [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.terminate" listener "symfony\component\httpkernel\eventlistener\profilerlistener::onkernelterminate". [] [] [2015-06-02 14:46:35] request.info: matched route "escritorio_virtual_login" (parameters: "_controller": "mlm\bundle\mlmbundle\controller\escritoriovirtualsecuritycontroller::loginaction", "_route": "escritorio_virtual_login") [] [] [2015-06-02 14:46:35] event.debug: notified event "kernel.request" listener "symfony\component\httpkernel\eventlistener\debughandlerslistener::configure". [] []
i sorted out issue. missed 1 field in user serialization username. that's why after redirect, authentication fails. username couldn't recovered. after adding it. works charm.
/** @see \serializable::serialize() */ public function serialize() { return serialize(array( $this->id, $this->name, $this->username, $this->email, $this->password, $this->isenabled, $this->isaccountnonexpired, $this->isaccountnonlocked, )); } /** @see \serializable::unserialize() */ public function unserialize($serialized) { list ( $this->id, $this->name, $this->username, $this->email, $this->password, $this->isenabled, $this->isaccountnonexpired, $this->isaccountnonlocked, ) = unserialize($serialized); }
Comments
Post a Comment