Grails Facebook插件-如何处理无效用户

Grails Facebook插件-如何处理无效用户,facebook,grails,plugins,filter,Facebook,Grails,Plugins,Filter,我用的是美妙的,一切正常。问题在于我提供了另一种身份验证方法:表单身份验证。如果系统中已经有一个用户的电子邮件地址是Facebook用户,我想优雅地提醒用户这一事实。我不知道怎么做,因为我被埋在一个从过滤器调用的服务中。理想情况下,我希望在登录页面上显示一条错误消息。这可能吗 在myFacebookAuthService中: FacebookUser create(FacebookAuthToken token) { log.info("Create domain for fac

我用的是美妙的,一切正常。问题在于我提供了另一种身份验证方法:表单身份验证。如果系统中已经有一个用户的电子邮件地址是Facebook用户,我想优雅地提醒用户这一事实。我不知道怎么做,因为我被埋在一个从过滤器调用的服务中。理想情况下,我希望在登录页面上显示一条错误消息。这可能吗

在my
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!!")

我希望向用户显示此错误消息,而不是一路出现异常。我该怎么做?谢谢

您可以将此消息放入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安全性配置为在异常后重定向到特殊url。只需放入
Config.groovy

grails.plugins.springsecurity.failureHandler.exceptionMappings = [
   'MyException': '/usernameIsBad'
]

谢谢你,伊戈尔。我有几个悬而未决的问题。我们可以聊聊吗?