【问题标题】:Can't get response code无法获取响应码
【发布时间】:2017-10-23 08:11:48
【问题描述】:

我想获取用户 AccessToken。

当用户点击注册/登录按钮时:

            $.ajax({
            url: 'Register',
            type: 'GET',
            data: { m:true },
            contentType: 'application/json; charset=utf-8',
            success: function (response) {
                if (response.success) {
                } else {
                }
            },
            error: function () {
            }
            });

我的注册方法:

            Uri uri = new Uri(FacebookHelpers.GetFacebookLoginURL());
            var res = await FacebookHelpers.FacebookRequest<object>(uri).ConfigureAwait(false);

在 res 中,我想从 FacebookRequest 获取结果以获取代码,而不是将该代码交换为访问令牌。

我的 GetFacebookLoginUrl 函数:

            var redirectUri = "https://www.facebook.com/connect/login_success.html";
            var uri = GetUri("https://www.facebook.com/dialog/oauth",
                Tuple.Create("client_id", FacebookAppId),
                Tuple.Create("redirect_uri", redirectUri),
                Tuple.Create("response_type", "code"),
                Tuple.Create("scope", "public_profile,email"),
                Tuple.Create("state", Convert.ToString(new Random().Next(9999)))
                );

在我的 FacebookRequest 函数中:

        public static async Task<T> FacebookRequest<T>(Uri uri)
        {
            string json;
            using (HttpClient client = new HttpClient())
            {
                json = await client.GetStringAsync(uri).ConfigureAwait(false);
            }

            try
            {
                var result = JsonConvert.DeserializeObject<T>(json);
                return result;
            }
            catch (JsonException ex)
            {
                throw new ArgumentException("Unable to deserialize the Facebook response.", ex);
            }
        }

当 FacebookRequest 函数尝试从提供的 URL 获取代码时出现此问题。

解析值时遇到意外字符:

Json 响应包含调用方法的相同页面。 FacebookRequest 不返回代码,而是返回成功。

有什么想法吗?

目标:我想从我的数据库中获取用户并将其帐户与我的机器人相关联。或者如果用户不存在,请先注册然后链接到机器人。

【问题讨论】:

  • 你检查过你的json 变量实际上包含什么......?
  • 我编辑了我的问题。它包含调用方法的整个 html...
  • 您不能在后台加载 Facebook 登录对话框 - 您必须将用户重定向到该地址。 (出于绝对明显的原因,用户需要能够通过地址栏验证他们确实是在向 Facebook 输入凭据,而不是网络钓鱼网站。)
  • 不会改变您需要通过链接或自动重定向将用户发送到 https://www.facebook.com/dialog/oauth/... 的事实。它必须在在用户的浏览器中调用;如果你尝试在后台请求它,那是行不通的。
  • 您可以指定要直接返回访问令牌 - 但在这种情况下,令牌会在重定向 URI 的片段部分中传递,这意味着您只能使用客户端从那里获取它代码。我想,这不是一个选择。

标签: c# facebook-graph-api facebook-login


【解决方案1】:

您不能在后台加载 Facebook 登录对话框 - 您必须将用户重定向到该地址。它必须在用户的浏览器中调用;如果你尝试在后台请求它,那是行不通的。

至于返回的是代码还是访问令牌:您可以指定要直接返回访问令牌 - 但在这种情况下,令牌会在重定向 URI 的片段部分中传递,这意味着您只能使用客户端代码从那里获取它。我想,这不是一个选择。 (如果您需要更多信息,参数response_type 和可能的值在此处描述,https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow#logindialog

【讨论】:

  • 再次感谢您:)))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2020-02-17
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多