doctrine forgot-password sfguard

Pregunta sfDoctrineGuard



forgot-password sfguard (3)

Estoy tratando de hacer una funcionalidad "Olvidé mi contraseña". Mi problema es que si intento hacer una consulta de Doctrine y enviar una contraseña al correo electrónico, recupera la contraseña cifrada. Veo algunas webs que DoctrineGuard no tiene esta funcionalidad y solo tiene funcionalidad de registro e inicio de sesión.

¿Es verdad?

En este caso, ¿cómo puedo hacer una función recordar contraseña?

Gracias


Las contraseñas son hash y luego se guardan en la base de datos, por lo que no puede recuperar la contraseña una vez que se ha guardado.

Hay varias formas de crear una función de "contraseña perdida":

  • Enviar una nueva contraseña por correo electrónico (no muy seguro, pero a algunas personas les gusta)
  • Envíe al usuario un correo electrónico con un enlace para restablecer la contraseña (y un token único), que le da al usuario una nueva contraseña o le permite ingresar una nueva contraseña.

Si recuerdo leer correctamente, sfDoctrineGuard no tiene un método "getPassword" que haga lo que necesita para ... recuperar la contraseña sin cifrar.

Estoy utilizando la primera recomendación de DuoSRX: crear una nueva contraseña, guardarla con $ user-> setPassword (que maneja la salazón y el hash automáticamente) y enviársela por correo electrónico al usuario. Luego se le recomienda al usuario que inicie sesión y cree una nueva contraseña.


A partir de la versión 5.0.0, el gran sfDoctrineGuard-Plugin tiene incorporado un módulo de olvido de contraseña. Pero en el archivo Léame correspondiente hay poca información sobre cómo usarlo :))

[TODO: document the forgot password feature]

Para usar la función de contraseña olvidada haga lo siguiente (suponiendo que ya haya instalado el complemento y que el inicio de sesión normal esté funcionando):

  1. habilite el módulo en settings.yml (y habilite i18n tal como lo está usando):

    all: .setting: enabled_modules: [default, sfGuardAuth, sfGuardForgotPassword] i18n: true

  2. agregue rutas en routing.yml (la adición automática no funcionó para mí). Y asegúrese de incluir una regla @homepage que se usa para redirigir.

    sf_guard_forgot_password_change: url: /forgot_password/:unique_key class: sfDoctrineRoute options: { model: sfGuardForgotPassword, type: object } param: { module: sfGuardForgotPassword, action: change } requirements: sf_method: [get, post] sf_guard_forgot_password: url: /forgot_password param: { module: sfGuardForgotPassword, action: index }

  3. habilite el envío de correos en factories.yml (tenga cuidado con las diferencias para prod / dev env . Vea también el documento oficial ):

    all: mailer: class: sfMailer param: logging: %SF_LOGGING_ENABLED% charset: %SF_CHARSET% delivery_strategy: realtime transport: class: Swift_SmtpTransport param: host: smtp.example.com port: 25 encryption: ~ username: [email protected] password: p4ssw0rd

  4. agregar dirección de remitentes a app.yml (y enrutamiento que no funciona automáticamente para mí). La dirección en app.yml y fábricas.yml debe ser la misma, de lo contrario, el servidor smtp podría quejarse:

    all: sf_guard_plugin: routes_register: true default_from_email: [email protected]

  5. Toque las apps/your_app/modules/sfGuardForgotPassword/config/security.yml para hacer que el formulario de solicitud esté accesible mientras está desconectado :

    secure: is_secure: true index: is_secure: false change: is_secure: false

  6. borre la caché con ./symfony cc .

Ahora olvida tu contraseña.