使用FacebookAuthService FacebookProfile的Spring Security Facebook自定义返回空值
我已经实现了Spring security facebook插件,它可以与默认的FacebookAuthService配合使用,但是当我通过创建FacebookAuthService.groovy自定义它以获取facebook用户详细信息时,当单击“使用facebook登录”按钮时,它会给出以下错误消息 Belw是FacebookUser从FacebookAuthService创建方法的快照:使用FacebookAuthService FacebookProfile的Spring Security Facebook自定义返回空值,facebook,grails,facebook-login,Facebook,Grails,Facebook Login,我已经实现了Spring security facebook插件,它可以与默认的FacebookAuthService配合使用,但是当我通过创建FacebookAuthService.groovy自定义它以获取facebook用户详细信息时,当单击“使用facebook登录”按钮时,它会给出以下错误消息 Belw是FacebookUser从FacebookAuthService创建方法的快照: FacebookUser create(FacebookAuthToken token) {
FacebookUser create(FacebookAuthToken token) {
Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
FacebookProfile fbProfile = facebook.userOperations().userProfile
String email = fbProfile.email
String username = fbProfile.username
String firstName = fbProfile.firstName
String lastName = fbProfile.lastName
User person = new User(
username: username,
password: token.accessToken.accessToken, //not really necessary
enabled: true,
accountExpired: false,
accountLocked: false,
passwordExpired: false,
//fill with data loaded from Facebook API
name: [firstName, lastName].join(' '),
email: email
)
person.save()
UserRole.create(person, Role.findByAuthority('ROLE_USER'))
UserRole.create(person, Role.findByAuthority('ROLE_FACEBOOK'))
FacebookUser fbUser = new FacebookUser(
uid: token.uid,
accessToken: token.accessToken.accessToken,
accessTokenExpires: token.accessToken.expireAt,
user: person
)
fbUser.save()
return fbUser
}
Error |
2015-01-11 15:15:47,948 [http-bio-8080-exec-4] ERROR [/TESTAPP].[default] - Servlet.service() for servlet [default] in context with path [/TESTAPP] threw exception
Message: Validation Error(s) occurred during save():
- Field error in object 'com.testapp.User' on field 'email': rejected value [null]; codes [com.testapp.User.email.nullable.error.com.testapp.User.email,com.testapp.User.email.nullable.error.email,com.testapp.User.email.nullable.error.java.lang.String,com.testapp.User.email.nullable.error,user.email.nullable.error.com.testapp.User.email,user.email.nullable.error.email,user.email.nullable.error.java.lang.String,user.email.nullable.error,com.testapp.User.email.nullable.com.testapp.User.email,com.testapp.User.email.nullable.email,com.testapp.User.email.nullable.java.lang.String,com.testapp.User.email.nullable,user.email.nullable.com.testapp.User.email,user.email.nullable.email,user.email.nullable.java.lang.String,user.email.nullable,nullable.com.testapp.User.email,nullable.email,nullable.java.lang.String,nullable]; arguments [email,class com.testapp.User]; default message [Property [{0}] of class [{1}] cannot be null]
- Field error in object 'com.testapp.User' on field 'name': rejected value [null]; codes [com.testapp.User.name.nullable.error.com.testapp.User.name,com.testapp.User.name.nullable.error.name,com.testapp.User.name.nullable.error.java.lang.String,com.testapp.User.name.nullable.error,user.name.nullable.error.com.testapp.User.name,user.name.nullable.error.name,user.name.nullable.error.java.lang.String,user.name.nullable.error,com.testapp.User.name.nullable.com.testapp.User.name,com.testapp.User.name.nullable.name,com.testapp.User.name.nullable.java.lang.String,com.testapp.User.name.nullable,user.name.nullable.com.testapp.User.name,user.name.nullable.name,user.name.nullable.java.lang.String,user.name.nullable,nullable.com.testapp.User.name,nullable.name,nullable.java.lang.String,nullable]; arguments [name,class com.testapp.User]; default message [Property [{0}] of class [{1}] cannot be null]
Line | Method
->> 145 | doCall in com.the6hours.grails.springsecurity.facebook.DefaultFacebookAuthDao$_create_closure4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 814 | withTransaction in org.grails.datastore.gorm.GormStaticApi
| 714 | withTransaction . . . in ''
| 144 | create in com.the6hours.grails.springsecurity.facebook.DefaultFacebookAuthDao
| 72 | authenticate . . . . in com.the6hours.grails.springsecurity.facebook.FacebookAuthProvider
| 58 | attemptAuthentication in com.the6hours.grails.springsecurity.facebook.FacebookAuthRedirectFilter
| 46 | doFilter . . . . . . in ''
| 82 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 1110 | runWorker . . . . . . in java.util.concurrent.ThreadPoolExecutor
| 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 722 | run . . . . . . . . . in java.lang.Thread
显示的错误为:
FacebookUser create(FacebookAuthToken token) {
Facebook facebook = new FacebookTemplate(token.accessToken.accessToken)
FacebookProfile fbProfile = facebook.userOperations().userProfile
String email = fbProfile.email
String username = fbProfile.username
String firstName = fbProfile.firstName
String lastName = fbProfile.lastName
User person = new User(
username: username,
password: token.accessToken.accessToken, //not really necessary
enabled: true,
accountExpired: false,
accountLocked: false,
passwordExpired: false,
//fill with data loaded from Facebook API
name: [firstName, lastName].join(' '),
email: email
)
person.save()
UserRole.create(person, Role.findByAuthority('ROLE_USER'))
UserRole.create(person, Role.findByAuthority('ROLE_FACEBOOK'))
FacebookUser fbUser = new FacebookUser(
uid: token.uid,
accessToken: token.accessToken.accessToken,
accessTokenExpires: token.accessToken.expireAt,
user: person
)
fbUser.save()
return fbUser
}
Error |
2015-01-11 15:15:47,948 [http-bio-8080-exec-4] ERROR [/TESTAPP].[default] - Servlet.service() for servlet [default] in context with path [/TESTAPP] threw exception
Message: Validation Error(s) occurred during save():
- Field error in object 'com.testapp.User' on field 'email': rejected value [null]; codes [com.testapp.User.email.nullable.error.com.testapp.User.email,com.testapp.User.email.nullable.error.email,com.testapp.User.email.nullable.error.java.lang.String,com.testapp.User.email.nullable.error,user.email.nullable.error.com.testapp.User.email,user.email.nullable.error.email,user.email.nullable.error.java.lang.String,user.email.nullable.error,com.testapp.User.email.nullable.com.testapp.User.email,com.testapp.User.email.nullable.email,com.testapp.User.email.nullable.java.lang.String,com.testapp.User.email.nullable,user.email.nullable.com.testapp.User.email,user.email.nullable.email,user.email.nullable.java.lang.String,user.email.nullable,nullable.com.testapp.User.email,nullable.email,nullable.java.lang.String,nullable]; arguments [email,class com.testapp.User]; default message [Property [{0}] of class [{1}] cannot be null]
- Field error in object 'com.testapp.User' on field 'name': rejected value [null]; codes [com.testapp.User.name.nullable.error.com.testapp.User.name,com.testapp.User.name.nullable.error.name,com.testapp.User.name.nullable.error.java.lang.String,com.testapp.User.name.nullable.error,user.name.nullable.error.com.testapp.User.name,user.name.nullable.error.name,user.name.nullable.error.java.lang.String,user.name.nullable.error,com.testapp.User.name.nullable.com.testapp.User.name,com.testapp.User.name.nullable.name,com.testapp.User.name.nullable.java.lang.String,com.testapp.User.name.nullable,user.name.nullable.com.testapp.User.name,user.name.nullable.name,user.name.nullable.java.lang.String,user.name.nullable,nullable.com.testapp.User.name,nullable.name,nullable.java.lang.String,nullable]; arguments [name,class com.testapp.User]; default message [Property [{0}] of class [{1}] cannot be null]
Line | Method
->> 145 | doCall in com.the6hours.grails.springsecurity.facebook.DefaultFacebookAuthDao$_create_closure4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 814 | withTransaction in org.grails.datastore.gorm.GormStaticApi
| 714 | withTransaction . . . in ''
| 144 | create in com.the6hours.grails.springsecurity.facebook.DefaultFacebookAuthDao
| 72 | authenticate . . . . in com.the6hours.grails.springsecurity.facebook.FacebookAuthProvider
| 58 | attemptAuthentication in com.the6hours.grails.springsecurity.facebook.FacebookAuthRedirectFilter
| 46 | doFilter . . . . . . in ''
| 82 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 1110 | runWorker . . . . . . in java.util.concurrent.ThreadPoolExecutor
| 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 722 | run . . . . . . . . . in java.lang.Thread
据我所知,我认为facebook.userOperations().userProfile无法检索facebook用户详细信息。
有人能帮我一下吗?或者我有什么遗漏吗?它看起来像
fbProfile。email
和fbProfile.name
为空,因此违反了用户的约束。或者……是的,Facebook提供的值可能是null
(对于空用户,或者如果用户不想共享此信息)。你可能需要一个变通办法,比如在你的应用程序中向用户索要电子邮件和姓名,或者其他什么。是的,facebook正在为这些字段返回空值。我已经照预期处理了它和它的工作。非常感谢您的回复。