ユーザーの認証に Facebook C# SDK バージョン 6.0.20 を使用しています。
私にとってはうまく機能し、ユーザーの姓名を取得できました。しかし、後で試してみると、アクセストークンを取得していますがfbClient.Get(“me”)
、次のエラーで失敗しています:
(OAuthException – #190) アクセス トークンの検証中にエラーが発生しました: セッションが現在保存されているセッションと一致しません。これは、セッションが作成されてからユーザーがパスワードを変更したか、Facebook がセキュリティ上の理由でセッションを変更したことが原因である可能性があります。
助けてください。
ユーザーが認証ダイアログからリダイレクトされたときに、次のコードを実行します。
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Params["code"] != null)
{
Facebook.FacebookClient fbClient = new Facebook.FacebookClient(GetAccessToken());
dynamic me = fbClient.Get("me");
string firstName = me.first_name;
string lastName = me.last_name;
string email = me.email;
string userID = me.id;
string gender = me.gender;
string dob = me.birthday;
string locale = me.locale;
string mStatus = me.relationship_status;
}
}
private string GetAccessToken()
{
if (HttpRuntime.Cache["access_token"] == null)
{
Dictionary<string, string> args = GetOauthTokens(Request.Params["code"]);
HttpRuntime.Cache.Insert("access_token", args["access_token"], null, DateTime.Now.AddMinutes(Convert.ToDouble(args["expires"])), TimeSpan.Zero);
}
return HttpRuntime.Cache["access_token"].ToString();
}
private Dictionary<string, string> GetOauthTokens(string code)
{
Dictionary<string, string> tokens = new Dictionary<string, string>();
string clientId = "xxxxxxxxxxxxxxxxxx";
string redirectUrl = "http://localhost:51215/TestFBWebSite/FacebookRedirect.aspx";
string clientSecret = "xxxxxxxxxxxxxxxxxxxxxx";
string url = string.Format("https://graph.facebook.com/oauth/access_token? client_id={0}&redirect_uri={1}&client_secret={2}&code={3}",
clientId, redirectUrl, clientSecret, code);
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string retVal = reader.ReadToEnd();
foreach (string token in retVal.Split('&'))
{
tokens.Add(token.Substring(0, token.IndexOf("=")),
token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1));
}
}
return tokens;
}