Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Facebook访问令牌检索_Java_Facebook_Spring_Model View Controller - Fatal编程技术网

Java Facebook访问令牌检索

Java Facebook访问令牌检索,java,facebook,spring,model-view-controller,Java,Facebook,Spring,Model View Controller,你好 我正在尝试与facebook整合。因此,我需要用户使用facebook登录到我的网站,然后我需要获得他们的信息,如朋友列表等 我的工作如下: @RequestMapping("/login") public void facebookLogin(HttpServletRequest request, HttpServletResponse response,String code) throws Exception { // ModelAndView mod

你好

我正在尝试与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");
        }
    }
@RequestMapping(“/login”)
public void facebook登录(HttpServletRequest请求、HttpServletResponse响应、字符串代码)引发异常
{
//ModelAndView模型=新的ModelAndView();
//Facebook尚未接受此用户。。。
if(code==null | | code.equalsIgnoreCase(“”)
{
字符串facebook\u url=”https://www.facebook.com/dialog/oauth?";
//facebook_url+=“客户端_id=“+Settings.getStringSetting(“应用程序id”);
facebook_url+=“客户端_id=“+”12849129…344”;
facebook\u url+=“&scope=发布\u动作、好友\u家乡、好友\u状态、好友\u生日”;
facebook_url+=“&redirect_uri=“+domain+”/facebook/login”;
facebook_url+=“&state=“+”ddffrreeiff”;
response.setStatus(response.SC_临时移动);
setHeader(“位置”,facebook_url);
}
//Facebook接受了我们的用户
其他的
{
//获取令牌以使用facebook API
字符串getTokenURL=”https://graph.facebook.com/oauth/access_token?"
+“客户端id=“+”128491…344”
+“&redirect_uri=“+domain+”/facebook/login”
+“&code=“+code
+&scope=publish\u actions、friends\u home、friends\u status、friends\u生日
+“&client_secret=“+”fc160e2ab…235254240c”;
//家乡的朋友
字符串结果=HTTPClient.sendHTTPRequestWithMethod(getTokenURL,“GET”);
字符串访问令牌=提取参数(结果).get(“访问令牌”);
//获取用户。。。
字符串get\u user\u url=”https://graph.facebook.com/me?access_token=“+接入令牌;
字符串user_str=HTTPClient.sendHTTPSRequestWithMethod(get_user_url,“get”);
JSONProcessor proc=新的JSONProcessor(用户_str);
System.out.println(proc.getStructure());
HashMap user=proc.getStructure();
字符串facebook_id=proc.getStructure().get(“id”).toString();
DBRecord rec=dbProc.getUserByFacebookId(facebook_id);
用户u=新用户();
u、 setValue(“facebook_访问_令牌”,访问_令牌);
u、 setValue(“facebook\u id”,facebook\u 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(“生日”,user.get(“生日”);
u、 设置值(“facebook_代码”,代码);
u、 setValue(“facebook_链接”,user.get(“链接”);
u、 setValue(“性别”,user.get(“性别”);
u、 setValue(“facebook\u照片\u url”https://graph.facebook.com/“+user.get(“id”)+”/picture?type=small”);
if(rec==null)
{
长用户_id=u.createInDB(dbProc);
u、 设置值(“id”,用户id);
}
其他的
{
u、 setValue(“id”,rec.getID());
u、 saveToDB(dbProc);
}
setCookie(回复,“facebook_代码”,代码86400000);
//返回新的ModelAndView(“/user/main_choose”);
response.setStatus(response.SC_临时移动);
response.setHeader(“Location”,“/user/main_choose”);
}
}
因此,我希望用户首先在没有代码参数的情况下访问/登录,然后我将他们重定向到
https://www.facebook.com/dialog/oauth
然后他们将登录到facebook,它应该将他们重定向回/login,但添加“code”参数,然后我可以调用
https://graph.facebook.com/oauth/access_token
使用该“code”参数检索当前用户的访问令牌。有了这个代币我就可以做我需要的一切了

所以,当我尝试从我的帐户(开发者帐户)登录时,一切正常。但当我尝试从其他帐户(例如我朋友的帐户)执行此操作时,我看到了facebook登录表单,但重定向后,我仍然没有“code”参数

为什么?? 以下是我的应用程序配置: 网站URL:
http://109.173.122.47/
画布URL:
http://109.173.122.47/

Sabdbox模式:在

上,
沙箱模式
是否已启用


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

这不是对你问题的回答,但希望你知道可以为你处理/简化此问题的框架-例如,我建议你查看Spring社交项目