Grails facebook spring安全性返回null
我正在使用“:spring security facebook:0.17”与“:spring security core:2.0-RC5”集成。 我已经实现了用于定制的facebookAuthService.groovy。但令牌未经过身份验证,fbProfile将返回除id和名称之外的nullGrails facebook spring安全性返回null,facebook,grails,spring-security,spring-social,spring-social-facebook,Facebook,Grails,Spring Security,Spring Social,Spring Social Facebook,我正在使用“:spring security facebook:0.17”与“:spring security core:2.0-RC5”集成。 我已经实现了用于定制的facebookAuthService.groovy。但令牌未经过身份验证,fbProfile将返回除id和名称之外的null FacebookUser create(FacebookAuthToken token) { log.info("Create domain for facebook user $token.ui
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”:“CAAHT52DPMKIBAH34ZFDY0PZC3A9Y3JZARVFCKTHN9XMZCOGL6QHZXNINA07ZBA5ZBXW2BWWYFLVCIIKPZN3PNK8QHFNQZCTS8TAHB1 WK4AEJZBEPNHQFRWSPZBOI0VK7U5W0IZB7GWX0MJCZC7UBY5MHB5W5RLKZB1WTN09QS4NIG9K9KDI22OPWBPEKKKKKKZD9FZDZD8KZD8KZD8KZD8W1W1W1W1W1W1W1W1W1W1W1W1W1W8W8W8W8W8W8W8W8W8W8W8W8W8W8W2.这两个词的意思是:一个词的意思意思是:一个词的意思是:一个词的意思是:一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词的意思是,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词,一个单词的意思是KS-8oSe8dyj1T6gAc8BG2yQ4bycPftVqfNt3uCGpesYIkI-dnwxd“,“凭据”:10261800340687885,“详细信息”:null,“名称”:““主体”:null,“重定向URI”:““uid”:10261800340687885}”
和FBI档案:
{“关于”:null,“生物”:null,“生日”:null,“班级”:“org.springframework.social.facebook.api.FacebookProfile”,“教育”:null,“电子邮件”:null,“FavoriteAthereletes”:null,“favoriteTeams”:null,“firstName”:null,“性别”:null,“家乡”:null,“id”:“10261800340687885”,“inspirationalPeople”:null,“interestedIn”:null,“语言”:null,“lastName”:null,“链接”:null,“语言环境:null,“位置”:null,“中间名”:null,“名称”:“桑吉布”
Maharjan,“political”:null,“quotes”:null,“relationshipStatus”:null,“relationshipStatus”:null,“宗教”:null,“signantother”:null,“体育”:null,“thirdPartyId”:null,“timezone”:null,“updatedTime”:null,“用户名”:null,“网站”:null,“工作”:null}
这里的问题是一切都是空的,我不知道为什么
PS:所有facebook凭据均正确,并且还提供了权限(公共个人资料、电子邮件和用户关于我)。
是因为令牌没有经过身份验证,还是我缺少了其他东西。非常感谢您的帮助。我终于明白了为什么除了名称和id之外所有内容都是空的 Facebook自2015年7月8日起更改了api-api版本2.4: 根据这一点,我们必须指定要返回的每个字段和边,例如
facebook.userOperations().getUserProfile()提供了除id和名称之外的空字段。因此解决方案是使用不同的api来设置字段,或者我们可以通过点击uri()手动完成。我终于弄明白了为什么除了名称和id之外所有内容都是空的 Facebook自2015年7月8日起更改了api-api版本2.4: 根据这一点,我们必须指定要返回的每个字段和边,例如
facebook.userOperations().getUserProfile()提供除id和name之外的空字段。因此,解决方案是使用允许设置字段的不同api,或者我们可以通过点击uri()手动执行此操作.您的
fbProfile
包含id
和name
顺便说一句。似乎Facebook API返回了一些东西,并且凭据是正确的。可能fb上的用户安全限制了提供此类数据?另外,请尝试使用curl从命令行获取,如curlhttps://graph.facebook.com/me?access_token=
然后查看它可以工作您的fbProfile
包含id
和name
顺便说一句。Facebook API似乎返回了一些东西,并且凭据是正确的。可能fb上的用户安全限制了提供此类数据?另外,尝试使用curl从命令行获取它,如curlhttps://graph.facebook.com/me?access_token=
并请参见如果它可以工作,但您是通过Spring Social Facebook请求此数据。我的意思是不是通过此身份验证插件。插件只会给您一个访问令牌,对吗?您传递给Spring Social Facebook客户端的字段列表(Facebook.userOperations().getUserProfile()
).它是独立的库,不以任何方式绑定到插件,实际上,如果您愿意,您可以使用任何其他facebook客户端,但您是通过Spring Social facebook请求此数据的。我的意思是不是通过此身份验证插件。插件只会给您一个访问令牌,对吗?您传递给Spring Social facebook客户端的字段列表(facebook.userOperations().getUserProfile()
)。它是独立的库,不以任何方式绑定到插件,实际上,如果您愿意,您可以使用任何其他facebook客户端