2

私は素晴らしいGrails Facebook プラグインを使用していますが、問題なく動作しています。問題は、フォーム認証という別の認証方法を提供していることにあります。Facebook ユーザーの電子メール アドレスを持つユーザーがシステムに既に存在する場合は、この事実をユーザーに適切に警告したいと思います。フィルターから呼び出されるサービスの中に埋もれているため、その方法がわかりません。理想的には、ログイン ページにエラー メッセージを表示したいと思います。これは可能ですか?

私の中でFacebookAuthService

    FacebookUser create(FacebookAuthToken token) {
    log.info("Create domain for facebook user $token.uid")

    Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
    FacebookProfile fbProfile = facebook.userOperations().userProfile
    String email = fbProfile.getEmail() 

    String emailMatch = User.findByEmailAddress(email)

    if(emailMatch != null)
        throw new RuntimeException("username is bad!!")

例外がずっと細流になるのではなく、このエラーメッセージをユーザーに表示したいと思います。これどうやってするの?ありがとう!

4

1 に答える 1

2

このメッセージをフラッシュ オブジェクトに入れることができます。

def grailsWebRequest = WebUtils.retrieveGrailsWebRequest()
def flash = grailsWebRequest.attributes.getFlashScope(request)
flash.error = "username is bad!!!"
return null // Facebook filter will skip authorization at this case

また、代わりにRuntimeExceptionのインスタンスを使用することをお勧めしますAuthenticationException。この場合、例外後に特別な URL にリダイレクトするように Spring Security を構成できます。入れるだけConfig.groovy

grails.plugins.springsecurity.failureHandler.exceptionMappings = [
   'MyException': '/usernameIsBad'
]
于 2012-07-08T04:03:03.630 に答える