Facebook 登录问题

Posted

技术标签:

【中文标题】Facebook 登录问题【英文标题】:FaceBook Login Problem 【发布时间】:2010-06-09 09:21:19 【问题描述】:

我正在寻找一个从 facebook 搜索中提取信息的应用程序,因此我需要登录 facebook。我已经在 facebook 开发者网站上注册了我的应用程序并获得了 api 密钥和密钥。在我的代码中,当我尝试登录时出现异常。这是我登录 facebook 的代码:

import com.facebook.api.FacebookRestClient;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;


public class FaceLogin 
    public FaceLogin()
        getUserID("username", "password");
    


private static void getUserID(String email, String password)

        String session = null;
        try 
            HttpClient http = new HttpClient();
            http.setParams(new HttpClientParams());                             //http.getHostConfiguration().setHost("http://www.facebook.com/");
            http.setState(new HttpState());
            String api_key = "***********some key*************";                 
            String secret  = "***********some key*************";                 
            FacebookRestClient client = new FacebookRestClient(api_key, secret);
            client.setIsDesktop(true);

        String token = client.auth_createToken();
        final String loginId = "http://www.facebook.com/login.php";
        GetMethod get = new GetMethod(loginId + "?api_key=" + api_key + "&v=1.0&auth_token=" +token);
        System.out.println("Get="+get);
        http.executeMethod(get);

        PostMethod post = new PostMethod(loginId);

        post.addParameter(new NameValuePair("api_key", api_key));
        post.addParameter(new NameValuePair("v", "1.0"));
        post.addParameter(new NameValuePair("auth_token", token));
        post.addParameter(new NameValuePair("fbconnect","true"));
        post.addParameter(new NameValuePair("return_session","true"));
        post.addParameter(new NameValuePair("session_key_only","true"));
        post.addParameter(new NameValuePair("req_perms","read_stream,publish_stream"));
        post.addParameter(new NameValuePair("lsd","8HYdi"));
        post.addParameter(new NameValuePair("locale","en_US"));
        post.addParameter(new NameValuePair("persistent","1"));
        post.addParameter(new NameValuePair("email", email));
        post.addParameter(new NameValuePair("pass", password));


        System.out.println("Token ="+token);
        int postStatus = http.executeMethod(post);
        System.out.println("Response : " + postStatus);

        session = client.auth_getSession(token);                            // Here I am getting error
        System.out.println("Session string: " + session);
        long userid = client.users_getLoggedInUser();
        System.out.println("User Id is : " + userid);

     catch (Exception e) 
        e.printStackTrace();

    

public static void main(String k[])

    FaceLogin facebookLoginObj=new FaceLogin();


我收到以下异常:

org.apache.commons.httpclient.HttpMethodBase 进程响应标头

警告:Cookie 被拒绝:“$Version=0; $域=已删除; $路径=/; $Domain=.facebook.com". Cookie 名称 不能以 $ 开头

响应:200

2010 年 6 月 8 日下午 2:07:36 org.apache.commons.httpclient.HttpMethodBase 进程响应标头

警告:Cookie 被拒绝:“$Version=0; $路径=已删除; $路径=/; $Domain=.facebook.com". Cookie 名称 不能以 $ 开头

Facebook 返回错误代码 100

com.facebook.api.FacebookException: 无效的参数 -v -> 1.0 在 com.facebook.api.FacebookRestClient.callMethod(FacebookRestClient.java:828) - auth_token -> 004e90dc8818d5f0921d1065d24508d3 在 com.facebook.api.FacebookRestClient.callMethod(FacebookRestClient.java:606) - 方法 -> facebook.auth.getSession - call_id -> 1275986256796 - api_key -> f7cb1e48c383ef599da9021fc4dec322 在 com.facebook.api.FacebookRestClient.auth_getSession(FacebookRestClient.java:1891) 在 facebookcrawler.FacebookLogin.getUserID(FacebookLogin.java:81) 在 facebookcrawler.FacebookLogin.( - 信号 -> 9344ec75b74a0a87bcae645046d45da8 FacebookLogin.java:24) 在 facebookcrawler.FaceLogin.main(FaceLogin.java:80)

这可能是创建会话的问题,我在网上搜索了所有解决方案但无法帮助我登录。

如果您能建议我解决此问题的方法,请帮助我。感谢您提出的所有宝贵建议。

【问题讨论】:

【参考方案1】:

我是凭直觉来的:

通过阅读你得到的异常,问题似乎是由于一些“格式错误”的 cookie,实际上它说“cookie 名称可能不以 $ 开头”,根据 cookie 就是这种情况RFC2109

我看到您使用的是 Apache HttpClient,它可以自动管理 cookie,并支持各种 cookie 规范(请参阅here)

由于您没有指定任何内容,我怀疑 HttpClient 默认使用符合 RFC2109 的 cookie,也许这些对于 facebook 来说是不合适的。

因此,您可能想在 HttpClient 中尝试不同的CookiePolicy,看看会发生什么。

附言请仔细检查您在上面复制和粘贴的异常,因为我担心它会泄露您的 api_keyauth_token 的值

【讨论】:

以上是关于Facebook 登录问题的主要内容,如果未能解决你的问题,请参考以下文章

Parse - 通过 Facebook 应用程序登录 Facebook

Facebook 登录(网络)看不到通过 facebook 设备应用程序登录的用户

未找到 Codeigniter Facebook\Facebook 类中的 Facebook 登录

Facebook 登录不适用于 Facebook 应用程序

解析facebook登录问题?

android facebook登录不适用于安装的本机facebook