春季社交Facebook - 单一Facebook实例

时间:2015-10-16 11:07:22

标签: java spring facebook spring-mvc spring-social

我刚刚使用最新的春季社交和春季社交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的一些原因可能是使用旧令牌。我尝试调试网址,但他们似乎没有发送任何访问令牌。

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

1 个答案:

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

希望这有帮助!