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

您可以将此消息放入 flash 对象中:

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. 在这种情况下,您可以配置 Spring Security 以在异常后重定向到特殊 url。只需放入Config.groovy

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