使用 MyFacebookClient 实现存在一个问题。
可能有人试图实现它遇到了错误:
给定的键不在字典中
正在尝试调用 ActionController 中的 ExternalLoginCallback 方法。
该方法时引发的错误
OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
被调用。
为了让它工作,必须重写方法 VerifyAuthentication。
特别是
public virtual AuthenticationResult VerifyAuthentication(HttpContextBase context, Uri returnPageUrl);
抽象类 OAuth2Client 的重载。
如果您使用以下内容:
public override AuthenticationResult VerifyAuthentication(HttpContextBase context, Uri returnPageUrl)
{
string code = context.Request.QueryString["code"];
string rawUrl = context.Request.Url.OriginalString;
//From this we need to remove code portion
rawUrl = Regex.Replace(rawUrl, "&code=[^&]*", "");
IDictionary<string, string> userData = GetUserData(QueryAccessToken(returnPageUrl, code));
if (userData == null)
return new AuthenticationResult(false, ProviderName, null, null, null);
AuthenticationResult result = new AuthenticationResult(true, ProviderName, userData["id"], userData["name"], userData);
userData.Remove("id");
userData.Remove("name");
return result;
}
}
最后你得到了以正确方式调用的方法,并且没有抛出异常。