在我的网站上,允许用户使用 facebook 登录。这样做时,我要求允许发布到用户提要。这就像一个魅力。
登录后,允许用户撰写评论,并在保存评论时询问用户是否要将评论发布到 facebook 上的用户提要。由于应该在将评论保存在我的本地数据库中之后发布到 facebook,我知道我需要执行身份验证服务器端,然后当我有一个令牌时,我可以发布到例如。
http://graph.facebook.com/10XXXX40308/feed
和
message : "This works"
我一直在尝试按照此处所述实现 facebook 网络登录:
步骤是:
- 针对
https://graph.facebook.com/oauth/authorize?client_id=MY_API_KEY&
redirect_uri= http://www.facebook.com/connect/login_success.html&
scope=publish_stream执行请求 - Facebook 会将您重定向到 http://www.facebook.com/connect/login_success.html?代码=MY_VERIFICATION_CODE
- 请求 https://graph.facebook.com/oauth/access_token?client_id=MY_API_KEY& redirect_uri= http://www.facebook.com/connect/login_success.html& client_secret=MY_APP_SECRET&code=MY_VERIFICATION_CODE Facebook 将回复 access_token=MY_ACCESS_TOKEN
在浏览器中执行 1. 时,应用程序会相应地运行。我使用 MY_VERIFICATION_CODE 从 facebook 获得重定向:
所以我尝试用这样的代码来做:
String url = "https://graph.facebook.com/oauth/authorize?client_id="+clientId+"&scope=publish_stream&redirect_uri=http://www.facebook.com/connect/login_success.html";
URL obj = new URL(url);
conn = (HttpURLConnection) obj.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
System.out.println("Request URL ... " + url);
boolean redirect = false;
// normally, 3xx is redirect
int status = conn.getResponseCode();
if (status != HttpURLConnection.HTTP_OK) {
if (status == HttpURLConnection.HTTP_MOVED_TEMP
|| status == HttpURLConnection.HTTP_MOVED_PERM
|| status == HttpURLConnection.HTTP_SEE_OTHER)
redirect = true;
}
System.out.println("Response Code ... " + status);
if (redirect) {
// get redirect url from "location" header field
String newUrl = conn.getHeaderField("Location");
// get the cookie if need, for login
String cookies = conn.getHeaderField("Set-Cookie");
// open the new connnection again
conn = (HttpURLConnection) new URL(newUrl).openConnection();
conn.setRequestProperty("Cookie", cookies);
System.out.println("Redirect to URL : " + newUrl);
}
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer html = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
html.append(inputLine);
}
in.close();
System.out.println("URL Content... \n" + html.toString());
System.out.println("Done");
但是发生的情况是,我没有得到 302,而是得到了 200 和代码中的登录页面:
好像漏了一步,或者看不懂流程。
我想要完成的是实现类似于 janrain 的类似调用:
https://rpxnow.com/api/v2/facebook/stream.publish
您可以在哪里执行此操作。
谢谢!