2010-04-26 81 views
0

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

这是真的吗?

在这种情况下,我该如何做记忆密码功能?

感谢

回答

1

密码进行散列,然后保存到数据库中,因此一旦它被保存,你不能恢复密码。

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

  • 通过电子邮件发送新密码(不是真的安全,但有些人喜欢也无妨)
  • 将用户发送一封电子邮件,一个重置的密码链接(和一个唯一的令牌),它可以给用户一个新的密码,或者允许用户输入一个新的密码。
+0

你说第一种方法不安全? 第二种方法你说...设置一个随机密码,发送它像一个链接.... user/reset/xdErDerfEFe其中“xdErDerfEFe”是标记,并在该操作做一个选择其中密码= ...并允许更改后? – nebur85 2010-04-26 21:31:21

+0

第一种方法不太安全,因为如果某人有权访问用户收件箱,他可以看到他的新密码,而第二种方法中,令牌只能使用一次,然后在密码更改后无效。 – DuoSRX 2010-04-27 07:20:38

+0

我尝试做类似... 1)输入密码,如果用户名已注册,请执行随机密码并执行setpassword。 2)它会发送一封电子邮件,比如......'用户名/密码/ xxxx',其中xxx是授权密码 3)如果您点击,则尝试使用此密码查找用户名。 我的问题是,密码是加密的,我无法找到真正的是如何encripted密码:( 你明白吗? – nebur85 2010-04-27 13:12:50

0

如果我记得阅读权限,sfDoctrineGuard没有一个“getPassword”方法,它将执行所需的操作...未加密地检索密码。

我正在使用DuoSRX的第一个建议:创建一个新密码,使用$ user-> setPassword(它可以自动处理腌制&散列)并将它通过电子邮件发送给用户。建议用户登录并创建一个新密码。

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邮件(提防differences for prod/dev env.See also the official doc.):

    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. 添加发件人地址app.yml(和路由不为我工作自动) 。在app.yml和工厂中的地址。阳明应该是一样的,否则SMTP服务器可能会抱怨:

    all: 
        sf_guard_plugin: 
        routes_register: true 
        default_from_email: [email protected] 
    
  5. 触摸apps/your_app/modules/sfGuardForgotPassword/config/security.ymlmake the request form accessible while logged out

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

现在忘记您的密码。

+1

唯一的事情,而不是'应用程序/ your_app/sfGuardForgotPassword/config/security.yml',它应该读取'apps/your_app/modules/sfGuardForgotPassword/config/security.yml' – jaudette 2013-02-28 23:18:08