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