我正在尝试在我的java应用程序中实现facebook登录。直到现在点击按钮我已经调用了servlet,根据客户端ID和密钥生成代码并将其重定向到重定向uri。我在facebook开发者控制台上注册了我的测试应用程序。 问题是代码生成完美但是没有生成访问令牌,我将获得基本信息。我尝试了很多代码。其中一个在下面。 客户端
google.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event) {
String fbURL = "http://www.facebook.com/dialog/oauth?client_id=CLIENTID&redirect_uri=REDIRECT URL &scope=email&scope=user_friends";
Window.open(fbURL,"_blank","");
}
});
SERVLET
public userInfoServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
PrintWriter out = response.getWriter();
String rid = request.getParameter("request_ids");
if (rid != null) {
response.sendRedirect("https://www.facebook.com/dialog/oauth?client_id="
+ clientID + "&redirect_uri=" + redirectURI);
} else {
// Get code
String code = request.getParameter("code");
if (code != null) {
// Format parameters
URL url = new URL(
"https://graph.facebook.com/oauth/access_token?client_id="
+ clientID + "&redirect_uri=" + redirectURI
+ "&client_secret=" + clientSecret
+ "&code=" + code);
// request for Access Token
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");
String line, outputString = "";
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
while ((line = reader.readLine()) != null) {
outputString += line;
}
out.println(outputString);
// extract access token from response
String accessToken = null;
if(outputString.indexOf("access_token")!=-1) {
accessToken = outputString.substring(13,outputString.indexOf("&"));
}
// request for user info
url = new URL("https://graph.facebook.com/me?access_token="
+ accessToken);
out.println(url);
URLConnection conn1 = url.openConnection();
outputString = "";
reader = new BufferedReader(new InputStreamReader(
conn1.getInputStream()));
while ((line = reader.readLine()) != null) {
outputString += line;
}
reader.close();
out.println(outputString);
// convert response JSON to Pojo class
FaceBookPojo fbp = new Gson().fromJson(outputString,
FaceBookPojo.class);
out.println(fbp);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
我没有得到生成访问令牌的确切问题。任何帮助都会很明显。
答案 0 :(得分:0)
您的req中有多个范围参数。它应该只有一个。
试试这个,
google.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String fbURL = "http://www.facebook.com/dialog/oauth?client_id=CLIENTID&redirect_uri=REDIRECT URL &scope=email,user_friends";
Window.open(fbURL,"_blank","");
}
});
它应该有用。