45

私はここにある認証の概要のステップ8にいます:http ://wiki.developers.facebook.com/index.php/How_Connect_Authentication_Works

特に、ユーザーはFacebook Connectを介してFacebookにログインし、Webセッションが作成されています。Facebook開発者ツールキットv2.0(明快さから)を使用してユーザーに関する情報を取得するにはどうすればよいですか。たとえば、ユーザーの名前と名前を取得したいとします。

ドキュメントの例は、Facebookアプリケーションを対象としていますが、そうではありません。

アップデート

Facebookは最近GraphAPIをリリースしました。Facebook Connectを使用しているアプリケーションを保守している場合を除き、最新のAPIを確認する必要があります:http: //developers.facebook.com/docs/

4

7 に答える 7

23

ユーザーが Facebook Connect でログインした後、サーバー側の呼び出しを行う方法を理解するのに非常に苦労しました。重要なのは、ログインが成功すると、Facebook Connect JavaScript がクライアントに Cookie を設定することです。これらの Cookie の値を使用して、サーバーで API 呼び出しを実行します。

紛らわしい部分は、彼らがリリースした PHP サンプルを見ていました。サーバー側 API は、これらの Cookie 値の読み取りと、ログインしているユーザーに代わって要求を行う準備ができている API オブジェクトの設定を自動的に処理します。

ユーザーが Facebook Connect でログインした後、サーバーでFacebook Toolkitを使用する例を次に示します。

サーバーコード:

API api = new API();
api.ApplicationKey = Utility.ApiKey();
api.SessionKey = Utility.SessionKey();
api.Secret = Utility.SecretKey();
api.uid = Utility.GetUserID();

facebook.Schema.user user = api.users.getInfo();
string fullName = user.first_name + " " + user.last_name;

foreach (facebook.Schema.user friend in api.friends.getUserObjects())
{
   // do something with the friend
}

ユーティリティ.cs

public static class Utility
{
    public static string ApiKey()
    {
        return ConfigurationManager.AppSettings["Facebook.API_Key"];
    }

    public static string SecretKey()
    {
        return ConfigurationManager.AppSettings["Facebook.Secret_Key"];
    }

    public static string SessionKey()
    {
        return GetFacebookCookie("session_key");
    }

    public static int GetUserID()
    {
        return int.Parse(GetFacebookCookie("user"));
    }

    private static string GetFacebookCookie(string name)
    {
        if (HttpContext.Current == null)
            throw new ApplicationException("HttpContext cannot be null.");

        string fullName = ApiKey() + "_" + name;
        if (HttpContext.Current.Request.Cookies[fullName] == null)
            throw new ApplicationException("Could not find facebook cookie named " + fullName);
        return HttpContext.Current.Request.Cookies[fullName].Value;
    }
}
于 2008-12-15T21:02:38.063 に答える
15

私はこの概念をフォローアップし、ASP.NET でこの問題を解決する本格的な記事を書きました。以下をご覧ください。

ASP.NET で Facebook Connect からユーザー データを取得する方法 - Devtacular

そのヘルパー クラスで良いスタートを切った Calebt に感謝します。

楽しみ。

于 2009-03-01T06:43:23.727 に答える
13

Facebook Connectは実際にはそれほど難しくはなく、ドキュメントが不足しているだけです。

ここから必要なJavaScriptを入力してください:http://tinyurl.com/5527og

ハッキングを防ぐために、CookieがFacebookによって提供される署名と一致することを検証します。開始方法の説明については、 http: //tinyurl.com/57ry3sを参照してください。

apiオブジェクト(Facebook.API.FacebookAPI)を作成するapiオブジェクトで、アプリケーションキーを設定し、アプリの作成時にFacebookが提供するシークレットを設定します。facebookconnectから作成したCookieを設定api.SessionKeyしてください。api.UserId

それが完了したら、Facebookへの呼び出しを開始できます。

Facebook.Entity.User user = api.GetUserInfo();   //will get you started with the authenticated person
于 2008-12-02T07:34:15.550 に答える
8

これは、これまでにリストされた回答にはありません。

ログインが成功したら、Facebook は、Cookie が実際に合法であり、クライアント マシンに配置されていることを検証することをお勧めします。

これを解決するために一緒に使用できる 2 つの方法を次に示します。IsValidFacebookSignature メソッドを calebt の Utility クラスに追加することをお勧めします。彼の GetFacebookCookie メソッドも少し変更したことに注意してください。

private bool IsValidFacebookSignature()
{
        //keys must remain in alphabetical order
        string[] keyArray = { "expires", "session_key", "ss", "user" };
        string signature = "";

        foreach (string key in keyArray)
            signature += string.Format("{0}={1}", key, GetFacebookCookie(key));

        signature += SecretKey; //your secret key issued by FB

        MD5 md5 = MD5.Create();
        byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(signature.Trim()));

        StringBuilder sb = new StringBuilder();
        foreach (byte hashByte in hash)
            sb.Append(hashByte.ToString("x2", CultureInfo.InvariantCulture));

        return (GetFacebookCookie("") == sb.ToString());
    }

    private string GetFacebookCookie(string cookieName)
    {
        //APIKey issued by FB
        string fullCookie = string.IsNullOrEmpty(cookieName) ? ApiKey : ApiKey + "_" + cookieName;

        return Request.Cookies[fullCookie].Value;
    }

SecretKey と ApiKey は、Facebook から提供される値です。この場合、これらの値を設定する必要があり、できれば .config ファイルから取得します。

于 2009-06-03T02:34:01.163 に答える
6

ビルのすばらしい記事をフォローアップして、この小さなコンポーネントを作成しました。FacebookConnectのCookieからユーザーを識別して検証します。

ASP.NETのFacebookConnect認証

それが誰かに役立つことを願っています!

乾杯、

アダム

于 2009-06-30T20:09:41.280 に答える
3

SocialAuth.NETを使用することもできます

Facebook、Google、MSN、Yahoo との認証、プロファイル、および連絡先を、ほとんど開発作業なしで提供します。

于 2011-05-30T12:33:56.627 に答える
1

私の 2 セント: 「Facebook でログイン」機能を利用した非常に単純なプロジェクト - facebooklogin.codeplex.com

ライブラリではありませんが、すべてがどのように機能するかを示しています。

于 2011-04-11T20:23:06.773 に答える