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

标签 facebook grails plugins filter

我正在使用精彩的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!!")

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

最佳答案

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

关于facebook - Grails Facebook 插件 - 如何处理无效用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378351/

相关文章:

php - 如何使用 codeigniter 登录 facebook

java - 如何用java编写自己的插件加载器?

javascript - 用于反转文本框值的 jquery 插件

grails - Grails find/findAll操作将无法正常工作?

Grails 4 Controller : Where in Grails 4 code can I find a proof that grails. controllers.defaultScope = 'singleton'

grails - 通过constrainedProperty访问Grails中的唯一约束

eclipse - 我无法从市场安装 Eclipse 的 Glance 插件。

iphone ShareKit 与 facebook 的视频上传?

ios - 使用未解析的标识符 FBSDKAppEventNamePurchased

facebook - 在 Rails 中使用 Facebook api 时无法将路径名转换为字符串