3

Grails用のAcegiプラグインを使用したパスワード取得手順の実装を探しています...Googleは私を失敗させています...

4

3 に答える 3

3

IMHO これは現在、Acegi プラグインの一部ではありません。LoginController に forgetPassword アクションを追加しました。

    def forgotPassword = {
    if (params.username) {
        User user = User.findByUsername(params.username)
        if (user) {
            def password = randomService.generateRandomString(8)
            user.passwd = authenticateService.encodePassword(password)
            if (!user.save(flush:true)) {
                user.errors.each {
                    log.error "err $it"
                }
                flash.message = message(code: "LoginController.msg.forgot.error")
            } else {
                sendMail {
                    to user.username
                    subject message(code:"LoginController.mail.forgot.subject" )
                    body(view:"forgotPasswordEmail", model: [person:user, password:password])
                }
                flash.message = message(code:"LoginController.msg.forgot", args:[user.username] )
            }
        } else {
            flash.message = message(code:"LoginController.msg.forgot.unknown", args:[params.username])
        }
    }
}

上記のコードは、Grails メール プラグインを使用しています。

于 2009-10-31T17:33:34.343 に答える
3

Google があなたを失望させているのは、Google が存在しないからです。ハッシュ化されたパスワードを元に戻すことは (ブルート フォース クラックやレインボー テーブルなしでは) 不可能です。

一般的なパターンは、パスワードを忘れたユーザーに 1 回限りのトークンを電子メールで送信することです。これを使用して、パスワードを好きなようにリセットできます。これはフレームワークに組み込まれていませんが、手動で行うのはそれほど難しくありません (grails メール プラグインの使用をお勧めします)。

于 2009-10-31T17:35:50.227 に答える
3

Acegi プラグインはそのままではこれをサポートしていませんが、メール確認プラグインを追加すれば、独自のプラグインを作成するのは非常に簡単です。

手順は次のとおりです。

ユーザーにメール アドレスと新しいパスワードの入力を求めるパスワード リセット フォームを作成します。

パスワード リセット フォームを処理するコントローラー アクションは、データを検証し、メール確認プラグインを使用して、ユーザーがクリックしてパスワードの変更を確認するためのリンクを含むメールをユーザーに送信する必要があります。これを行うには、プラグインによって追加された EmailConfirmationService サービスで次のメソッドを呼び出します。

def sendConfirmation(String emailAddress, String theSubject, Map model = null, 
String userToken = null)

どこ:

emailAddress = address of user changing password
theSubject = subject of e-mail sent
model = any data passed to GSP that creates e-mail body
userToken = hashed user's password

ユーザーが電子メールのリンクをクリックすると (この電子メールをカスタマイズする方法については、プラグインのドキュメントを参照してください)、onConfirmationサービスの閉鎖が呼び出されます。

このクロージャーは、次のBootstrap.groovyように割り当てる必要があります。

def emailConfirmationService

def init = { servletContext -> 

  emailConfirmationService.onConfirmation = { email, hashedPassword ->

    User user = User.findByEmail(email)
    user.passwd = hashedPassword
    if (!user.save()) {
        // Handle this error, somehow....
    }

    // Then return a map which will redirect the user to the login screen  (for example)
    [controller:'userProfile', action:'login'] 
  } 
}

ユーザーの電子メールとハッシュ化されたパスワードがこのクロージャーに渡され、ユーザーのパスワードをリセットして保存できることに注意してください。

于 2010-01-31T17:56:31.710 に答える