3

我使用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 用户个人资料图像)等。现在 Username 正在像这样保存facebook_100003641451723。我想要用户的真实姓名,以便我可以将其保存到我的真实姓名字段中。知道我该怎么做吗?

更新 :

我在那里找到了一个解决方案Grails Facebook Login using spring security - 如何知道登录的用户名

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

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
4

2 回答 2

1

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

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

于 2013-07-11T07:16:35.270 回答
0

I recommend you should Oauth plugin, check it out here : http://grails.org/plugin/oauth I am developing a Grails project using this plugin, my project includes Facebook authenticaton, and now its working fine.

于 2014-03-20T03:50:28.387 回答