1

我使用与“:spring-security-core:2.0-RC5”集成的“:spring-security-facebook:0.17”。 我已经实现了facebookAuthService.groovy用于定制。但是令牌没有被认证,并且fbProfile除id和name外都返回null。Grails Facebook弹簧安全返回null

FacebookUser create(FacebookAuthToken token) { 
    log.info("Create domain for facebook user $token.uid") 

    //Use Spring Social Facebook to load details for current user from Facebook API 
    Facebook facebook = new FacebookTemplate(token.accessToken.accessToken) 
    FacebookProfile fbProfile = facebook.userOperations().userProfile 
    FacebookProfile fbProfile2 = facebook.userOperations().getUserProfile() 
    def ff = facebook.userOperations().userPermissions 
    String email = fbProfile.email 
    String username = fbProfile.username 
    String firstName = fbProfile.firstName 
    String lastName = fbProfile.lastName 

    println fbProfile as JSON 
    println token as JSON 
    println fbProfile.email 

    User person = new User(
      username: 'jgf', 
      password: token.accessToken.accessToken, //not really necessary 
      enabled: true, 
      accountExpired: false, 
      accountLocked: false, 
      passwordExpired: false, 

      //fill with data loaded from Facebook API 
      email: email 
    ) 
    person.save(failOnError: true) 
    UserRole.create(person, AuthRole.findByAuthority('ROLE_USER')) 
    UserRole.create(person, AuthRole.findByAuthority('ROLE_FACEBOOK')) 
    FacebookUser fbUser = new FacebookUser(
      uid: token.uid, 
      accessToken: token.accessToken.accessToken, 
      accessTokenExpires: token.accessToken.expireAt, 
      user: person 
    ) 
    fbUser.save(failOnError: true) 
    return fbUser 
} 

的反应是如下: 访问令牌:

{ “的accessToken”:{ “的accessToken”: “CAAHt52DpmkIBAH34zFdy0PZC3a9y3JZARvfrVckTHN9xMZCOgL6QHzxNIna07ZBa5ZBXw2BZCwyflvCIIkPzn3pNk8QHFNqZCts8tAHZB1wK4AEJZBEPNHqFRWssPZBuIOCa6vk7U5W3K0ilIZB7GWx0MJCZC7UBy5mhb5W5RLkZB1wTn09Qs4NIGU9KDi22OPWbpEKQJoERr9fSfJwZDZD”, “expireAt”:“2016-02-01T06:58: 46Z “},”认证“:假,” 权威 “:[],” 代码 “:” AQD3IrrusGkBsF91yaD68T81S4s-TO4qG17DARQepzB-y2q4vmWSFkoTmMX_ObJHjbOg83YcSE0DwsNjvKS7U2JH_O2C6XjVGM5vG8ZvxpXTo57RFhAzvTxd0NMIVL4Qypto2VRDcLeNI IW8dCQHNqhzJ-0l3_4BQfHk4ygXFEBFTmZA6wkFspnLr9awL5qL8t0m6h5AZbkydM6KhQCYmL_xmy8Evl22NSjYRG-G-edjVNo4t4Fn9AQt7AXEjG_xjytdUoBPa0Zpl5AGM1-VpeYOvhKDPGvXQ3fFkS-8oSe8dyj1T6gAc8BG2yQ4bycPftVqfNt3uCGpesYIkI-dnwxd “ ”资格证书“:1026180034068785, ”细节“:空, ”名“: ”“, ”校长“:空, ”redirectUri“:” http://localhost:8080/j_spring_security_facebook_check “” UID “:1026180034068785}

和fbProfile:

{” 约 “:空,” 生物 “:空,” 生日 “:空,” 阶级 “:” org.springframework.social.facebook .api.FacebookProfile “ ”教育“:空, ”电子邮件“:空, ”favoriteAtheletes“:空, ”favoriteTeams“:空, ”名字“:空, ”性别“:空, ”故乡“:空,” ID “:” 1026180034068785" ,“inspirationalPeopl E “:空,” interestedIn “:空,” 语言 “:空,” 姓氏 “:空,” 链接 “:空,” 现场 “:空,” 位置 “:空,” 中间名 “:空,” 名” :“Sanjib Maharjan”,“political”:null,“quotes”:null,“relationshipStatus”:null,“religion”:null,“significantOther”:null,“sports”:null,“thirdPartyId”:null, timezone“:null,”updatedTime“:null,”username“:null,”website“:null,”work“:null}

这里的问题是一切都是空的,我找不出原因。

PS:所有facebook凭证都是正确的,并且还提供了许可(public_profile,email和user_about_me)。 是因为令牌没有通过身份验证,或者是有一些其他的东西,我失踪。任何帮助表示赞赏。谢谢。

+1

你的'fbProfile'包含'id'和'name'顺便说一句。似乎Facebook API返回的东西和凭据是正确的。 fb上用户的安全性可能会限制提供此类数据?另外,尝试使用curl从命令行获取它,例如'curl https://graph.facebook.com/me?access_token ='并查看它是否有效 –

回答

0

我终于弄清楚为什么除了名字和ID之外,一切都是空的。

的Facebook已经因为改变了API 2015年7月8日 - API 2.4版本:https://developers.facebook.com/docs/apps/changelog#v2_4

,并根据我们必须指定你想获得返回的每场边缘,例如

https://graph.facebook.com/me?access_token=kjhgfgfhgghjhghj&fields=id,name,email,firstname

facebook.userOperations()。getUserProfile()被提供除ID和name.So空字段的解决方案是使用不同的API,允许设置字段,或者我们可以手动完成击中uri(https://graph.facebook.com/me?access_token=kjhgfgfhgghjhghj&fields=id,name,email,firstname)。

+1

但是您通过_Spring Social Facebook_请求这些数据。我的意思是不通过这个身份验证插件。插件只是给你一个_access token_,可以工作,对吗?您传递给Spring Social Facebook客户端的字段列表('facebook.userOperations()。getUserProfile()')。它是独立的lib,不以任何方式绑定到插件,实际上,如果你愿意,你可以使用任何其他的Facebook客户端 –

+0

谢谢你纠正我。非常感激。 – Mcoder