使用 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;
}
}
最后,您以正确的方式调用了该方法,并且没有抛出异常。