restFB 生成的令牌是真的吗?
Is restFB generated token is genuine?
我使用 restFB 调用 FaceBook Graph api 来登录、获取用户的帖子等。
在 Facebook 的开发者帐户中创建了一个应用程序。
尝试调用用户详细信息,使用此处生成的令牌,
https://developers.facebook.com/tools/explorer?method=GET&path=8560751784547897&version=v2.8
例如:上面url提供的accessToken=EAA....F
当我在浏览器中点击 url 时,我能够获取所有用户详细信息,如下所示,
https://graph.facebook.com/v2.8/me?fields=id,name,email,birthday?access_token=EAA....f
我在浏览器中收到以下响应,
{
"id": "1127949",
"name": "youtr name",
"email": "youmail\u0040gmail.com"
"birthday": "10/27/1998"
}
我使用以下代码动态生成访问令牌,
StringBuffer callbackURLbuffer = request.getRequestURL();
int index = callbackURLbuffer.lastIndexOf("/");
callbackURLbuffer.replace(index, callbackURLbuffer.length(), "").append("/callback");
callbackURL = URLEncoder.encode(callbackURLbuffer.toString(), "UTF-8");
String authURL = "https://graph.facebook.com/oauth/authorize?client_id="
+ facebookAppId
+ "&redirect_uri="
+ callbackURL
+ "&scope=user_about_me,"
+ "user_actions.books,user_actions.fitness,user_actions.music,user_actions.news,user_actions.video,user_activities,user_birthday,user_education_history,"
+ "user_events,user_photos,user_friends,user_games_activity,user_groups,user_hometown,user_interests,user_likes,user_location,user_photos,user_relationship_details,"
+ "user_relationships,user_religion_politics,user_status,user_tagged_places,user_videos,user_website,user_work_history,ads_management,ads_read,email,"
+ "manage_notifications,manage_pages,publish_actions,read_friendlists,read_insights,read_mailbox,read_page_mailboxes,read_stream,rsvp_event";
在我的 callbackURL servlet 中,我正在获取具有 code
值的 accessToken,如下所示,
StringBuffer redirectURLbuffer = request.getRequestURL();
int index = redirectURLbuffer.lastIndexOf("/");
redirectURLbuffer.replace(index, redirectURLbuffer.length(), "").append("/callback");
redirectURL = URLEncoder.encode(redirectURLbuffer.toString(), "UTF-8");
code = request.getParameter("code");
if(null!=code) {
accessURL = "https://graph.facebook.com/oauth/access_token?client_id=" + facebookAppId +
"&redirect_uri=" + redirectURL + "&client_secret=" + facebookAppSecret + "&code=" + code;
webContent = getWebContentFromURL(accessURL);
accessToken = getAccessTokenFromWebContent(webContent);
以上代码使用的其他函数,
private static String getWebContentFromURL(String webnames) {
try {
URL url = new URL(webnames);
URLConnection urlc = url.openConnection();
//BufferedInputStream buffer = new BufferedInputStream(urlc.getInputStream());
BufferedReader buffer = new BufferedReader(new InputStreamReader(urlc.getInputStream(), "UTF8"));
StringBuffer builder = new StringBuffer();
int byteRead;
while ((byteRead = buffer.read()) != -1)
builder.append((char) byteRead);
buffer.close();
String text=builder.toString();
return text;
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
而且,
private static String getAccessTokenFromWebContent (String webContent) {
String accessToken = null;
int s = webContent.indexOf("access_token=") + ("access_token=".length());
int e = webContent.indexOf("&");
accessToken = webContent.substring(s, e);
return accessToken;
}
假设这个 accessToken = EAA....2
如果我用这个 Token 调用下面的 url,
https://graph.facebook.com/v2.8/me?fields=id,name,email,birthday&access_token=EAA....2
我收到以下回复,
{
"id": "1127949",
"name": "youtr name",
"email": "youmail\u0040gmail.com"
}
如果我点击以下 url,使用生物字段,我在 json 中收到如下错误消息,
{
"error": {
"message": "(#12) bio field is deprecated for versions v2.8 and higher",
"type": "OAuthException",
"code": 12,
"fbtrace_id": "ARkoFJVP/Jk"
}
}
有人能说说为什么我会这样吗?
看看这里,了解用户权限。
https://developers.facebook.com/docs/facebook-login/permissions/#reference-user_about_me.
根据您的评论,关于调试您的令牌,听起来您没有获得 facebook 为 user_about_me
启用的权限。
您必须向 Facebook 发送有关您的应用程序的评论并需要 Facebook 批准,然后只有您可以访问用户详细信息和其他内容。
按照这些步骤,
转到 - https://developers.facebook.com/apps/your_app_id/review-status/
单击开始提交按钮。
Select 您需要权限的复选框。然后点击添加项目按钮。
然后单击每个权限的编辑注释。
在此,简要介绍您的应用程序是否具有此权限,并上传您的应用程序演示视频。
Facebook 将对其进行审核并accept/reject 按照规范进行审核。
这就是你所缺少的,它会导致你的问题..
我使用 restFB 调用 FaceBook Graph api 来登录、获取用户的帖子等。
在 Facebook 的开发者帐户中创建了一个应用程序。
尝试调用用户详细信息,使用此处生成的令牌,
https://developers.facebook.com/tools/explorer?method=GET&path=8560751784547897&version=v2.8
例如:上面url提供的accessToken=EAA....F
当我在浏览器中点击 url 时,我能够获取所有用户详细信息,如下所示,
https://graph.facebook.com/v2.8/me?fields=id,name,email,birthday?access_token=EAA....f
我在浏览器中收到以下响应,
{
"id": "1127949",
"name": "youtr name",
"email": "youmail\u0040gmail.com"
"birthday": "10/27/1998"
}
我使用以下代码动态生成访问令牌,
StringBuffer callbackURLbuffer = request.getRequestURL();
int index = callbackURLbuffer.lastIndexOf("/");
callbackURLbuffer.replace(index, callbackURLbuffer.length(), "").append("/callback");
callbackURL = URLEncoder.encode(callbackURLbuffer.toString(), "UTF-8");
String authURL = "https://graph.facebook.com/oauth/authorize?client_id="
+ facebookAppId
+ "&redirect_uri="
+ callbackURL
+ "&scope=user_about_me,"
+ "user_actions.books,user_actions.fitness,user_actions.music,user_actions.news,user_actions.video,user_activities,user_birthday,user_education_history,"
+ "user_events,user_photos,user_friends,user_games_activity,user_groups,user_hometown,user_interests,user_likes,user_location,user_photos,user_relationship_details,"
+ "user_relationships,user_religion_politics,user_status,user_tagged_places,user_videos,user_website,user_work_history,ads_management,ads_read,email,"
+ "manage_notifications,manage_pages,publish_actions,read_friendlists,read_insights,read_mailbox,read_page_mailboxes,read_stream,rsvp_event";
在我的 callbackURL servlet 中,我正在获取具有 code
值的 accessToken,如下所示,
StringBuffer redirectURLbuffer = request.getRequestURL();
int index = redirectURLbuffer.lastIndexOf("/");
redirectURLbuffer.replace(index, redirectURLbuffer.length(), "").append("/callback");
redirectURL = URLEncoder.encode(redirectURLbuffer.toString(), "UTF-8");
code = request.getParameter("code");
if(null!=code) {
accessURL = "https://graph.facebook.com/oauth/access_token?client_id=" + facebookAppId +
"&redirect_uri=" + redirectURL + "&client_secret=" + facebookAppSecret + "&code=" + code;
webContent = getWebContentFromURL(accessURL);
accessToken = getAccessTokenFromWebContent(webContent);
以上代码使用的其他函数,
private static String getWebContentFromURL(String webnames) {
try {
URL url = new URL(webnames);
URLConnection urlc = url.openConnection();
//BufferedInputStream buffer = new BufferedInputStream(urlc.getInputStream());
BufferedReader buffer = new BufferedReader(new InputStreamReader(urlc.getInputStream(), "UTF8"));
StringBuffer builder = new StringBuffer();
int byteRead;
while ((byteRead = buffer.read()) != -1)
builder.append((char) byteRead);
buffer.close();
String text=builder.toString();
return text;
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
而且,
private static String getAccessTokenFromWebContent (String webContent) {
String accessToken = null;
int s = webContent.indexOf("access_token=") + ("access_token=".length());
int e = webContent.indexOf("&");
accessToken = webContent.substring(s, e);
return accessToken;
}
假设这个 accessToken = EAA....2
如果我用这个 Token 调用下面的 url,
https://graph.facebook.com/v2.8/me?fields=id,name,email,birthday&access_token=EAA....2
我收到以下回复,
{
"id": "1127949",
"name": "youtr name",
"email": "youmail\u0040gmail.com"
}
如果我点击以下 url,使用生物字段,我在 json 中收到如下错误消息,
{
"error": {
"message": "(#12) bio field is deprecated for versions v2.8 and higher",
"type": "OAuthException",
"code": 12,
"fbtrace_id": "ARkoFJVP/Jk"
}
}
有人能说说为什么我会这样吗?
看看这里,了解用户权限。
https://developers.facebook.com/docs/facebook-login/permissions/#reference-user_about_me.
根据您的评论,关于调试您的令牌,听起来您没有获得 facebook 为 user_about_me
启用的权限。
您必须向 Facebook 发送有关您的应用程序的评论并需要 Facebook 批准,然后只有您可以访问用户详细信息和其他内容。
按照这些步骤,
转到 - https://developers.facebook.com/apps/your_app_id/review-status/
单击开始提交按钮。
Select 您需要权限的复选框。然后点击添加项目按钮。
然后单击每个权限的编辑注释。
在此,简要介绍您的应用程序是否具有此权限,并上传您的应用程序演示视频。
Facebook 将对其进行审核并accept/reject 按照规范进行审核。
这就是你所缺少的,它会导致你的问题..