0

我正在尝试执行“我忘记了密码”功能。我的问题是,如果我尝试进行 Doctrine 查询并将密码发送到电子邮件,它会检索加密的密码。我看了一些网站,DoctrineGuard 没有这个功能,只有注册和登录功能。

这是真的吗?

在这种情况下,我该如何做一个记住密码的功能?

谢谢

4

3 回答 3

3

从 5.0.0 版本开始,伟大的 sfDoctrineGuard-Plugin 有一个内置的忘记密码模块。但是在相应的自述文件中,关于如何使用它的信息很少:))

[TODO: document the forgot password feature]

要使用忘记密码功能,请执行以下操作(假设您已经安装了插件并且正常登录正常工作):

  1. 启用模块(并在settings.yml使用它时启用 i18n):

    all:
      .setting:
      enabled_modules: [default, sfGuardAuth, sfGuardForgotPassword]
      i18n: true
    
  2. 在 routing.yml 中添加路由(自动添加对我不起作用)。并确保包含用于重定向的规则@homepage。

    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. 启用邮寄factories.yml注意prod/dev env 的差异另请参阅官方文档。):

    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:   test@example.com
            password:   p4ssw0rd
    
  4. 将发件人地址添加app.yml(以及对我来说无法自动工作的路由)。app.yml 和 factory.yml 中的地址应该相同,否则 smtp-server 可能会报错:

     all:
      sf_guard_plugin:
        routes_register: true
        default_from_email: test@example.com
    
  5. 在注销时触摸apps/your_app/modules/sfGuardForgotPassword/config/security.yml以使请求表单可访问:

    secure:
      is_secure: true      
    index:
      is_secure: false       
    change:
      is_secure: false
    
  6. 清除./symfony cc缓存。

现在忘记密码。

于 2012-03-30T13:37:38.327 回答
1

密码经过哈希处理,然后保存到数据库中,因此一旦保存密码,您将无法恢复密码。

有几种方法可以创建“密码丢失”功能:

  • 通过电子邮件发送新密码(不是很安全,但有些人还是喜欢它)
  • 向用户发送一封包含重置密码链接(和唯一令牌)的电子邮件,该链接要么为用户提供新密码,要么允许用户输入新密码。
于 2010-04-26T17:59:00.790 回答
0

如果我记得没看错的话,sfDoctrineGuard 没有“getPassword”方法来做它需要做的事情……检索未加密的密码。

我正在使用 DuoSRX 的第一个建议:创建一个新密码,使用 $user->setPassword 保存它(自动处理加盐和散列),然后通过电子邮件将其发送给用户。然后建议用户登录并创建一个新密码。

于 2010-04-26T22:50:54.950 回答