【问题标题】:Grails Facebook Plugin - How to Handle Invalid UserGrails Facebook 插件 - 如何处理无效用户
【发布时间】:2012-07-07 20:21:46
【问题描述】:

我正在使用美妙的Grails Facebook Plugin,一切正常。问题在于我提供了另一种身份验证方式:表单身份验证。如果系统中已经有用户使用 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!!")

我想向用户显示此错误消息,而不是让异常一直流淌。我怎样才能做到这一点?谢谢!

【问题讨论】:

    标签: facebook grails plugins filter


    【解决方案1】:

    您可以将此消息放入 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
    

    另外,最好使用AuthenticationException 的实例而不是RuntimeException。在这种情况下,您可以配置 Spring Security 以在异常后重定向到特殊 url。只需输入Config.groovy

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

    【讨论】:

    • 谢谢伊戈尔。我有几个悬而未决的问题。我们可以聊聊吗?
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多