如何从 Facebook Authentication for Spring Security in Grails 获取 Facebook 用户名、电子邮件、电话号码等

Posted

技术标签:

【中文标题】如何从 Facebook Authentication for Spring Security in Grails 获取 Facebook 用户名、电子邮件、电话号码等【英文标题】:How to fetch Facebook UserName, Email, phoneno etc from Facebook Authentication for Spring Security in Grails 【发布时间】:2013-07-09 07:12:47 【问题描述】:

我将Spring Security Core Plugin 用于身份验证,Facebook Authentication for Spring Security 用于 Facebook 登录。我的 FB 登录与 Spring Security Plugin 配合得很好。但我对此有一些问题。如何获取 Facebook 用户的用户名、电子邮件、电话号码等,以便将其保存到我的数据库。

这是我的 Spring Security Core Person.groovy 域类文件...

class Person 

transient springSecurityService

String realName
String username
String password
boolean enabled
boolean accountExpired
boolean accountLocked
boolean passwordExpired
byte[] avatar
String avatarType
    ...... more code ...........

在这里,您可以看到我添加了更多字段,例如 realName(用于保存 facebook 用户名)、avatar(用于保存 facebook 用户个人资料图像)等。现在用户名正在像这样 facebook_100003641451723 保存。我想要用户的真实姓名,以便我可以将其保存到我的真实姓名字段中。知道我该怎么做吗??

更新:

我在那边找到了一个解决方案Grails Facebook Login using spring security - how to know logged in user name

但我不知道我把这段代码放在哪里...

void onCreate(FacebookUser user, FacebookAuthToken token) 
  Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
  FacebookProfile fbProfile = facebook.userOperations().userProfile

  //fill the name
  //fieldname ('fullname' at this example) is up to you
  user.realName = fbProfile.name
 

更新:

现在我通过运行 grails create-service FacebookAuthService 创建了新服务,并且我的 FacebookAuthService.groovy 在 services/groovypublish/FacebookAuthService.groovy 中创建..

这是我的 FacebookAuthService.groovy 文件..

package groovypublish

import org.grails.twitter.Person
import com.the6hours.grails.springsecurity.facebook.FacebookAuthToken


class FacebookAuthService 

   def serviceMethod() 

   

   void onCreate(Person user, FacebookAuthToken token) 
   Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
   FacebookProfile fbProfile = facebook.userOperations().userProfile

   //fill the name
   //fieldname ('fullname' at this example) is up to you
   user.realName = fbProfile.name
  

  

然后我将依赖项放在我的 BuildConfig.groovy 文件中 ....

dependencies 
    // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.

     runtime 'mysql:mysql-connector-java:5.1.22'
     compile 'org.springframework.social:spring-social-core:1.0.1.RELEASE'
     compile 'org.springframework.social:spring-social-facebook:1.0.1.RELEASE'

现在当我启动我的 grails 应用程序 grails run-app 它显示错误

     C:\Users\Shreshtt\workspace\groovypublish\grails-app\services\groovypublish\FacebookAuthService.groovy: 14: unable to resolve class Facebook @ line 14, column 12.
 Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
          ^

     C:\Users\Shreshtt\workspace\groovypublish\grails-app\services\groovypublish\FacebookAuthService.groovy: 14: unable to resolve class FacebookTemplate @ line 14, column 23.
 Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
                     ^

     C:\Users\Shreshtt\workspace\groovypublish\grails-app\services\groovypublish\FacebookAuthService.groovy: 15: unable to resolve class FacebookProfile @ line 15, column 19.
 FacebookProfile fbProfile = facebook.userOperations().userProfile
                 ^

 3 errors

【问题讨论】:

【参考方案1】:

您必须将其放入FacebookAuthService 的实现中。

只需使用该名称创建服务,并使用此代码(或类似代码)添加方法onCreate。并且不要忘记将 Spring Social Facebook 添加为依赖项

【讨论】:

不知道点击FB登录按钮后会调用哪个动作。我还是不明白我会把def FacebookAuthService..放在哪里。 这是一项服务,标准 Grails 服务:grails.org/doc/latest/guide/services.html 我的 grails-app/services 文件夹是空的。我是否必须通过运行此命令来创建新服务grails create-service FacebookAuthService 请检查我的更新问题 你必须导入这个类:docs.oracle.com/javase/tutorial/java/package/usepkgs.html【参考方案2】:

我建议你应该 Oauth 插件,在这里查看:http://grails.org/plugin/oauth 我正在使用这个插件开发一个 Grails 项目,我的项目包括 Facebook 身份验证,现在它工作正常。

【讨论】:

以上是关于如何从 Facebook Authentication for Spring Security in Grails 获取 Facebook 用户名、电子邮件、电话号码等的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Facebook 检索照片

如何从 Facebook 应用程序发布到 Facebook 页面?

如何从 Facebook sdk 获取 Facebook 聊天列表 [关闭]

如何从网站获取 Facebook 身份验证令牌

如何从 facebook 移动网络应用程序获取 iphone facebook 应用程序的通知

如何从 facebook ios sdk 3.1 中提取 facebook 电子邮件?