1

Grails アプリで Acegi プラグインを使用しています。ユーザーが登録すると、保護されているアクションにリダイレクトされます。したがって、ログインフォームが表示されます。

ただし、ユーザーが登録を完了するとすぐに自動的にログインすることをお勧めします。ログインフォームが使用するアクションにリダイレクトすることでこれを達成できるようです

redirect(uri:"/j_acegi_security_check?j_username=${username}&j_password=${passed}")

しかし、これは、ユーザーのパスワードを示す HTTP 要求をクライアントに (そしてサーバーに) 送信します。安全な方法で自動的にログインする方法はありますか?

ありがとう、ドン

4

3 に答える 3

3

Spring セキュリティ プラグイン (grails generate-registration) のコントローラー クラスを生成すると、RegisterController に次の行が表示されます。

class RegisterController {

def daoAuthenticationProvider

    ...

    def save = {
        ...
        def auth = new AuthToken(person.username, params.passwd)
        def authtoken = daoAuthenticationProvider.authenticate(auth)
        SecurityContextHolder.context.authentication = authtoken
        redirect uri: '/'
    }

params.passwdプレーンテキストのパスワード (ハッシュ化されていない) であることを確認してください。

于 2010-01-27T11:10:58.727 に答える
0

これはバート・ベックウィズの答えです(私のものではありません)

(バートのコメントとして残されましたが、もっと目立つに値すると思います)

パスワードがない場合は、次の方法でユーザーをロードできます

def user = User.findByUsername(username) 

3 パラメーター コンストラクターで権限配列を設定します。経由で認証を作成します

GrantedAuthority[] auths = user.authorities.collect { new GrantedAuthorityImpl(it.authority) }

次に、authenticate() の呼び出しを省略して、次を使用できます。

SecurityContextHolder.context.authentication = new UsernamePasswordAuthenticationToken(username, 'unknown', auths) 
于 2011-08-18T19:13:41.900 に答える
0

テスト以外のコードでこれを試したことはありませんが、これは統合テスト内でユーザーをログインさせるために作成した方法です (テスト設定で適切なユーザー/ロールを構築/保存した後):

import org.codehaus.groovy.grails.plugins.springsecurity.GrailsDaoAuthenticationProvider
import org.springframework.security.providers.UsernamePasswordAuthenticationToken
import org.springframework.security.context.SecurityContextHolder

...

def logInAsUser(username, password) {
    daoAuthenticationProvider.getUserCache().removeUserFromCache(username) 
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password)
    SecurityContextHolder.context.authentication = daoAuthenticationProvider.authenticate(token)
}

セキュリティ コンテキストで認証トークンを作成して挿入します。ユーザーをログインさせてセキュリティを通過させるために必要な作業がもう少しあるかもしれませんが、これがすべての始まりです。

私は実際に、現在のアプリについて 1 週間か 2 週間であなたが求めていることを正確に行う必要があります。私が行う前に完全に理解できたら、投稿してください :)。

于 2010-01-27T04:04:28.893 に答える