2015-10-16 85 views
1

我刚刚创建了一个项目,使用最新的春季社交和春季社交Facebook(和春季启动)。春季社交Facebook - 单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可能使用旧的令牌。我试着调试urls,但他们似乎没有发送任何访问令牌。

有什么我在这里做错了吗?我能以另一种方式获得当前连接吗?

+0

您是否第二次调试了访问令牌以确保已创建新会话? – The1Fitz

回答

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"); 

希望这有助于!