我正在使用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;
}
答案 0 :(得分:2)
fbClient.Get(“我”)确实有效(没有前面的“/”),这就是我们正在使用它并且它正常工作。
string redirectUrl = "http://localhost:51215/TestFBWebSite/FacebookRedirect.aspx";
我注意到这部分 - 我发现使用localhost(或127.0.0.1)时集成不起作用,我们通过设置“test.mydomain.com”的主机记录来指向127.0.0.1来解决这个问题。
我们在现场环境中偶尔会遇到#190错误。这很奇怪,因为只有在Facebook刚刚对用户进行身份验证后才会触发生成错误的位置,因此身份验证令牌不应该已经过期! 我们正在编写处理此错误的编码(即,不要将用户验证到我们的系统上),但到目前为止,我可以将这两种可能性视为问题的原因:
我认为这可能是选项1,但是我还没有找到足够的信息来支持它
答案 1 :(得分:1)
我认为开头有语法错误。
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;
尝试此代码使用“\ me”而不是“me”
答案 2 :(得分:0)
您的帐户将被屏蔽并显示190错误代码如果您向未知的人发送更多朋友请求。所以取消请求并再次登录。