使用spring social FacebookConnectionFactory获取facebook访问令牌

时间:2014-03-10 16:59:25

标签: java facebook spring facebook-graph-api spring-social

我正在尝试使用Spring Social实现Facebook连接,基于此示例(来自春季社交手册):

FacebookConnectionFactory connectionFactory = 
    new FacebookConnectionFactory("clientId", "clientSecret");
OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();
OAuth2Parameters params = new OAuth2Parameters();
params.setRedirectUri("https://my-callback-url");
String authorizeUrl = oauthOperations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, params);
response.sendRedirect(authorizeUrl);

// upon receiving the callback from the provider:
AccessGrant accessGrant = oauthOperations.exchangeForAccess(authorizationCode, "https://my-callback-url", null);
Connection<Facebook> connection = connectionFactory.createConnection(accessGrant);

我的问题是我不知道我的重定向网址应该是什么。我的代码是这样的:

@RequestMapping("/face")
    public String communicate() {
        FacebookConnectionFactory connectionFactory = 
                new FacebookConnectionFactory(clientId, clientSecret);
            OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();
            OAuth2Parameters params = new OAuth2Parameters();
                    //this remdirectUri should be another one?
            params.setRedirectUri("http://dev01.spring:8080/spring/face");
            String authorizeUrl = oauthOperations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, params);
            System.out.println(authorizeUrl);
            //return "redirect:"+authorizeUrl;

            // upon receiving the callback from the provider:
            //AccessGrant accessGrant = oauthOperations.exchangeForAccess(authorizationCode, "https://my-callback-url", null);
            //Connection<Facebook> connection = connectionFactory.createConnection(accessGrant);
    }

我的authorizeUrl是这样的(来自System.out行): https://graph.facebook.com/oauth/authorize?client_id=myId&response_type=code&redirect_uri=http%3A%2F%2Fdev01.spring%3A8080%2Fspring%2Fface

如果我取消注释我继续将Oauth流重定向到此authorizeUrl的行,我收到以下错误:此网页有一个重定向循环。 所以我的问题是,重定向uri应该是什么。谢谢。

很晚编辑 ,希望对某人有所帮助。这是我的控制器和完成整个Oauth2舞蹈的方法。我必须补充一点,当问到这个问题时,这个有效,我不知道它现在的表现如何。

@Controller
public class FacebookController {

    private static final String clientId = "clientIdHere";              // clientId from facebook app
    private static final String clientSecret = "clientSecret here";     // clientSecret
    private FacebookConnectionFactory connectionFactory;                    // facebookConnectionFactory

    /*
     * If an authorization was given by provider(code) we get an token and bind the api.
     */
    @RequestMapping("/facebook/callback")
    public String authorize(@RequestParam("code") String authorizationCode,Model model) {
        // exchange facebook code with an access token.                                                                 
        AccessGrant accessGrant = connectionFactory.getOAuthOperations().exchangeForAccess(authorizationCode, "http://localhost:8080/testApp/facebook/callback", null); // not that the application was deployed at "http://localhost:8080/testApp"
        // connect to facebook with the given token.
        Connection<Facebook> connection = connectionFactory.createConnection(accessGrant);
        // bind the api
        Facebook facebook = connection.getApi();
        // get user profile informations
        FacebookProfile userProfile = facebook.userOperations().getUserProfile();

        // At this point you have acces to the facebook api.
        // For ex you can get data about the user profile like this

        // create user with facebook's user accounts details.
        User facebookUser = new User(userProfile.getFirstName(),
                userProfile.getLastName(),
                userProfile.getEmail(),
                Role.ROLE_FACEBOOKUSER,
                "socialuser");

        return "redirect:/home";
    }
}

0 个答案:

没有答案