¿Problemas al intentar iniciar sesión en su aplicación con el correo electrónico en lugar del nombre de usuario? ¡Aprenda a habilitar ambas formas!

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.ymlarchivo (y config.ymlsi 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).


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores