我刚刚使用最新的春季社交和春季社交Facebook(以及春季启动)创建了一个项目。
我尝试实施Facebook注册工作正常,但每次都会为第一个连接的用户返回相同的连接/配置文件。
我的Facebook个人资料控制器是:
@RestController
@RequestMapping(path = "/api/unsecure/facebook")
public class FacebookProfileController implements Serializable {
private static final long serialVersionUID = 1895700328147293496L;
@Autowired
private Facebook facebook;
@RequestMapping(path = "/profile", method = RequestMethod.GET)
public Result<FBUserVO> getUserFBProfile() {
if (!facebook.isAuthorized()) {
return ResultFactory.getFailResult("Facebook signup failed!");
}
FBUserVO user = FBUserToFBUserVO.INSTANCE.apply(facebook.userOperations().getUserProfile());
PagedList<Reference> friends = facebook.friendOperations().getFriends();
if (!friends.isEmpty()) {
user.setFriendsMessage("You have " + friends.size() + " friends playing. Join Now!");
}
return ResultFactory.getSuccessResult(user);
}
}
这是第一次......之后它会每次都返回相同的个人资料信息,即使我正在调试FacebookTemplate类时,这是使用新的/有效的access_token为新用户创建的,但是创建URL的一些原因可能是使用旧令牌。我尝试调试网址,但他们似乎没有发送任何访问令牌。
我在这里做错了什么吗?我可以用另一种方式获得当前连接吗?
答案 0 :(得分:0)
您必须使用ConnectionRepository类(允许删除第一个登录用户的Facebook提供程序的现有连接,这会导致您的问题)。
使用像这样的构造函数并消除Facebook自动装配:
private ConnectionRepository connectionRepository;
@Inject
public FacebookProfileController(ConnectionRepository connectionRepository) {
this.connectionRepository = connectionRepository;
}
通过connectionRepository实例,您可以通过执行以下操作获取当前登录用户的Facebook对象:
connectionRepository.findPrimaryConnection(Facebook.class).getApi()
注意:要检查用户是否未经过身份验证,您需要使用:
connectionRepository.findPrimaryConnection(Facebook.class)==null
当您完成为当前登录用户提取数据时,您必须使用以下说明删除通过构造函数创建的持久连接:
connectionRepository.removeConnections("facebook");
希望这有帮助!