2010-04-26 78 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