gpt4 book ai didi

c# - FacebookApplication.VerifyAuthentication(_httpContext, GenerateLocalCallbackUri()) 在 Facebook 上返回 null

转载 作者:太空狗 更新时间:2023-10-29 20:53:56 25 4
gpt4 key购买 nike

我使用 nopcommerce 开发了一个 mvc 5 应用程序,我使用外部回调使用 facebook 登录,它工作正常,但现在它不工作,我找不到实际问题。并使用下面的代码

this.FacebookApplication.VerifyAuthentication(_httpContext, GenerateLocalCallbackUri());

它总是返回 null 并且身份验证状态失败我在网上搜索并执行了所有操作并遵循了这些步骤但我仍然无法使用 facebook 登录。

我的代码在FacebookProviderAuthorizer.cs中是这样的

private AuthorizeState VerifyAuthentication(string returnUrl)
{
var authResult = DotNetOpenAuth.AspNet.Clients.FacebookApplication.VerifyAuthentication(_httpContext, GenerateLocalCallbackUri());

if (authResult.IsSuccessful)
{
}
}

然后写回调方法

private Uri GenerateLocalCallbackUri()
{
string url = string.Format("{0}plugins/externalauthFacebook/logincallback/", _webHelper.GetStoreLocation());
return new Uri(url);
}

然后生成服务登录url

private Uri GenerateServiceLoginUrl()
{
//code copied from DotNetOpenAuth.AspNet.Clients.FacebookClient file
var builder = new UriBuilder("https://www.facebook.com/dialog/oauth");
var args = new Dictionary<string, string>();
args.Add("client_id", _facebookExternalAuthSettings.ClientKeyIdentifier);
args.Add("redirect_uri", GenerateLocalCallbackUri().AbsoluteUri);
args.Add("response_type", "token");
args.Add("scope", "email");
AppendQueryArgs(builder, args);
return builder.Uri;
}

最佳答案

我们在 2017 年 3 月 27 日星期一遇到了同样的问题,当时 Facebook 停止了对其 Graph API v2.2 的支持。

我们还使用了最初通过 Nuget 安装的 DotNetOpenAuth。源代码可在以下链接获得:

https://github.com/DotNetOpenAuth/DotNetOpenAuth

具体来说,我们发现我们的代码使用了 4.3 分支,其中包含 DotNetOpenAuth.AspNet.DLL 的源代码。检查源代码后,我们发现问题出在 DotNetOpenAuth.AspNet\Clients\OAuth2\FacebookClient.cs 中的这段代码,位于 QueryAccessToken 方法中:

using (WebClient client = new WebClient()) {
string data = client.DownloadString(builder.Uri);
if (string.IsNullOrEmpty(data)) {
return null;
}

var parsedQueryString = HttpUtility.ParseQueryString(data);
return parsedQueryString["access_token"];
}

具体而言,问题在于 ParseQueryString 调用。从 API v2.3 开始,数据不再以 HTML 查询字符串的形式返回,而是以标准的 JSON 格式返回。

为了解决这个问题,我们创建了自己的继承 OAuth2Client 的自定义类,并从 FacebookClient.cs 导入了大部分相同的代码。然后,我们用解析 JSON 响应以提取 access_token 并返回它的代码替换了上面的代码片段。您可以在同一 FacebookClient 类中的 GetUserData 方法中查看如何执行此操作的示例:

FacebookGraphData graphData;
var request =
WebRequest.Create(
"https://graph.facebook.com/me?access_token=" +
MessagingUtilities.EscapeUriDataStringRfc3986(accessToken));
using (var response = request.GetResponse()) {
using (var responseStream = response.GetResponseStream()) {
graphData = JsonHelper.Deserialize<FacebookGraphData>(responseStream);
}
}

唯一的其他更改是注册我们的自定义类以代替 FacebookClient 类,以便 OAuth 回调使用它来处理来自 Facebook API 的帖子。完成此操作后,一切都会再次顺利进行。

关于c# - FacebookApplication.VerifyAuthentication(_httpContext, GenerateLocalCallbackUri()) 在 Facebook 上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com