我正在使用acegi 0.5.2并启用了OpenID支持。我想知道如何访问提供商(即Google,Yahoo!)返回的URL(或用户名)。我找不到任何关于这方面的文档,所以我追踪了acegi的代码并在GrailsOpenIdAuthenticationProvider中找到了这个:
OpenIDAuthenticationToken response = (OpenIDAuthenticationToken) authentication
OpenIDAuthenticationStatus status = response.status
// handle the various possibilites
if (status == OpenIDAuthenticationStatus.SUCCESS) {
// Lookup user details
UserDetails userDetails = _userDetailsService.loadUserByUsername(response.identityUrl)
return new GrailsOpenIdAuthenticationToken(userDetails, response.status, response.identityUrl)
}
似乎response.identityUrl包含了我需要的东西。如何从控制器(或服务)的空间获取它?
感谢。
答案 0 :(得分:1)
acegi插件为您的项目提供了LoginController,它具有以下操作:authfail。在其实现中,您可以通过以下代码检查OpenID值:
println "openid = ${session['SPRING_SECURITY_LAST_EXCEPTION'].extraInformation}"
然后,您可以使用提供商提供的OpenID自动创建新的用户记录或执行任何操作。