Con la configuración predeterminada de su paquete de usuario disponible en la guía de configuración en el repositorio oficial de FOSUserBundle, necesitará un nombre de usuario, su correo electrónico y la contraseña para registrarse en el módulo predeterminado / registro.
Un inicio de sesión predeterminado después de su registro, se puede lograr fácilmente con el nombre de usuario y la contraseña. Pero si intenta iniciar sesión con su correo electrónico , un incómodo mensaje de error "credenciales no válidas" será la respuesta de su formulario, aunque ingrese la cuenta de correo electrónico correcta, este mensaje aparecerá una y otra vez.
O si su api de oAuth usa FOSUserBundle como el proveedor de usuario predeterminado, e intenta usar la contraseña grant_type (enviando las credenciales de usuario en los parámetros), se devuelve un mensaje de error de autenticación porque su parámetro de nombre de usuario es el correo electrónico del usuario.
Este problema se puede resolver fácilmente cambiando la propiedad del proveedor de usuario en su security.yml
archivo (y config.yml
si usa FOSOAuthServerBundle).
FOSUserBundle
Actualiza la propiedad fos_userbundle en los proveedores de tu archivo security.yml
:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
# Your id property should look like :
# id: fos_user.user_provider.username
# Change to
id: fos_user.user_provider.username_email
Luego, podrá iniciar sesión con el correo electrónico y el nombre de usuario de los formularios de inicio de sesión predeterminados o personalizados.
FOSOAuthServerBundle
Actualice la propiedad user_provider en la configuración del archivo config.yml
.
fos_oauth_server:
db_driver: orm
client_class: easymedic\apiBundle\Entity\Client
access_token_class: easymedic\apiBundle\Entity\AccessToken
refresh_token_class: easymedic\apiBundle\Entity\RefreshToken
auth_code_class: easymedic\apiBundle\Entity\AuthCode
# Tu servicio real > propiedad user_provider, debería verse así
#service:
# user_provider: fos_user.user_provider.username
# Change it for
service:
user_provider: fos_user.user_provider.username_email
Luego, podrás iniciar sesión en su proyecto con nombre de usuario o correo electrónico (correo electrónico canónico) en la autenticación a través de API (oauth tokens grant_type contraseña).
Conviertete en un programador más sociable