gpt4 book ai didi

java - Facebook access_token 检索

转载 作者:行者123 更新时间:2023-12-01 14:36:22 28 4
gpt4 key购买 nike

美好的一天。

我正在尝试与 Facebook 集成。所以我需要用户使用 facebook 登录我的网站,然后我需要获取他们的信息,例如好友列表等。

我执行以下操作:

@RequestMapping("/login")
public void facebookLogin(HttpServletRequest request, HttpServletResponse response,String code) throws Exception
{
// ModelAndView model = new ModelAndView();
// Facebook did not accept this user yet...
if(code==null||code.equalsIgnoreCase(""))
{
String facebook_url = "https://www.facebook.com/dialog/oauth?";
// facebook_url+="client_id="+ Settings.getStringSetting("app_id");
facebook_url+="client_id="+ "12849129...344";
facebook_url+="&scope=publish_actions,friends_hometown,friends_status,friends_birthday";
facebook_url+="&redirect_uri="+domain+ "/facebook/login";
facebook_url+="&state="+ "DDFFRREEiiFF";
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", facebook_url);
}
// Facebook accepted our user
else
{
// Getting token to use facebook API
String getTokenURL = "https://graph.facebook.com/oauth/access_token?"
+"client_id="+ "128491....344"
+"&redirect_uri="+domain+ "/facebook/login"
+"&code="+code
+"&scope=publish_actions,friends_hometown,friends_status,friends_birthday"
+"&client_secret="+"fc160e2ab...235254240c";
//friends_hometown
String result = HTTPClient.sendHTTPRequestWithMethod(getTokenURL, "GET");
String access_token = extractParams(result).get("access_token");
// Get user...
String get_user_url = "https://graph.facebook.com/me?access_token="+access_token;
String user_str = HTTPClient.sendHTTPSRequestWithMethod(get_user_url,"GET");
JSONProcessor proc = new JSONProcessor(user_str);
System.out.println(proc.getStructure());
HashMap<String,Object> user = proc.getStructure();
String facebook_id = proc.getStructure().get("id").toString();
DBRecord rec = dbProc.getUserByFacebookId(facebook_id);
User u = new User();
u.setValue("facebook_access_token",access_token);
u.setValue("facebook_id",facebook_id);
u.setValue("first_name",user.get("first_name"));
u.setValue("last_name",user.get("last_name"));
u.setValue("facebook_name",user.get("name"));
u.setValue("birthday",user.get("birthday"));
u.setValue("facebook_code",code);
u.setValue("facebook_link",user.get("link"));
u.setValue("gender",user.get("gender"));
u.setValue("facebook_photo_url","https://graph.facebook.com/"+user.get("id")+"/picture?type=small");
if(rec==null)
{

Long user_id = u.createInDB(dbProc);
u.setValue("id",user_id);
}
else
{
u.setValue("id",rec.getID());
u.saveToDB(dbProc);
}
setCookie(response,"facebook_code",code,86400000);
// return new ModelAndView("/user/main_choose");
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", "/user/main_choose");
}
}

所以我希望用户首先进入/login 而不使用代码参数,然后将他们重定向到 https://www.facebook.com/dialog/oauth然后他们将登录 facebook,它应该将他们重定向回/login ,但添加“code”参数,然后我可以使用 https://graph.facebook.com/oauth/access_token 调用该“code”参数用于检索当前用户的access_token。有了这个 token 我就能做我需要做的一切。

因此,当我尝试从我的帐户(开发人员帐户)登录时 - 一切顺利。但是当我尝试从其他帐户(例如我 friend 的)执行此操作时 - 我看到 Facebook 登录表单,但重定向后我仍然没有“代码”参数。

为什么?这是我的应用程序配置:站点网址: http://109.173.122.47/ Canvas 网址: http://109.173.122.47/Sabdbox 模式:开启

最佳答案

沙盒模式是否已启用

如果沙盒模式启用,您是唯一授权使用该应用程序的人,

关于java - Facebook access_token 检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16457457/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com