【问题标题】:Twitter oAuth callbackUrl - localhost developmentTwitter oAuth callbackUrl - 本地主机开发
【发布时间】:2010-10-22 11:57:06
【问题描述】:

是否有其他人难以获得 Twitters oAuth 的回调 URL 以访问他们的 localhost 开发环境。 显然它最近已被禁用。 http://code.google.com/p/twitter-api/issues/detail?id=534#c1

有人有解决方法吗?我真的不想停止我的发展

【问题讨论】:

  • 通过将 twitter 回调 url 设置为我的真实网站 url,它对我有用。在 localhost -> twitter 注册中进行测试时,重定向到 localhost(而不是网站 url)。

标签: twitter oauth


【解决方案1】:

备选方案 1.

设置您的 .hosts (Windows) 或 etc/hosts 文件以将活动域指向您的本地主机 IP。如:

127.0.0.1 xyz.com

xyz.com 是您的真实域名。

备选方案 2。

此外,文章还提供了使用 URL 缩短服务的提示。缩短您的本地 URL 并将结果作为回调提供。

替代方案 3.

此外,它似乎可以提供例如 http://127.0.0.1:8080 作为 Twitter 的回调,而不是 http://localhost:8080

【讨论】:

  • 会不会出现以下错误:远程服务器返回错误:(401) Unauthorized?
  • 本地主机在没有隧道的情况下如何工作?它实际上并没有击中你的本地机器?
  • @JackTuck 回调由用户的浏览器调用,而不是由 Twitter 的服务器调用。
【解决方案2】:

上周我只需要这样做。显然 localhost 不起作用,但 127.0.0.1 确实 Go 数字。

这当然假设您在 Twitter 上注册了两个应用程序,一个用于您的直播www.mysite.com,另一个用于127.0.0.1

【讨论】:

    【解决方案3】:

    只需将http://127.0.0.1:xxxx/ 作为回调 url,其中 xxxx 是您的框架的端口

    【讨论】:

      【解决方案4】:

      是的,由于最近在 OAuth 中发现的安全问题,它已被禁用。目前唯一的解决方案是创建两个 OAuth 应用程序 - 一个用于生产,一个用于开发。在开发应用程序中,您设置 localhost 回调 URL 而不是实时的。

      【讨论】:

      • 我刚刚尝试过这样做,但它不接受 localhost:3000 作为 URL 格式...
      • 是的,他们似乎过滤了此类 URL。 :( 但是对自定义回调 url 的支持又回来了——也许那里支持它们。
      【解决方案5】:

      回调 URL 已编辑

      http://localhost:8585/logintwitter.aspx
      

      转换为

      http://127.0.0.1:8585/logintwitter.aspx
      

      【讨论】:

        【解决方案6】:

        这就是我的做法:

        注册的回调网址: http://127.0.0.1/Callback.aspx

           OAuthTokenResponse authorizationTokens = 
                OAuthUtility.GetRequestToken(ConfigSettings.getConsumerKey(), 
                                             ConfigSettings.getConsumerSecret(), 
                                             "http://127.0.0.1:1066/Twitter/Callback.aspx");
        

        配置设置:

        public static class ConfigSettings
        {
            public static String getConsumerKey()
            {
                return System.Configuration.ConfigurationManager.AppSettings["ConsumerKey"].ToString();
            }
        
            public static String getConsumerSecret()
            {
                return System.Configuration.ConfigurationManager.AppSettings["ConsumerSecret"].ToString();
            }
        
        }
        

        Web.config:

        <appSettings>
        
            <add key="ConsumerKey" value="xxxxxxxxxxxxxxxxxxxx"/>
            <add key="ConsumerSecret" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
        
        </appSettings>
        

        确保将项目的“使用动态端口”属性设置为“假”,并改为输入静态端口号。 (我用的是 1066)。

        我希望这会有所帮助!

        【讨论】:

          【解决方案7】:

          使用http://smackaho.st

          它的作用是与 127.0.0.1 建立简单的 DNS 关联,允许您绕过 localhost 或 127.0.0.1 上的过滤器:

          smackaho.st。 28800 IN A 127.0.0.1

          因此,如果您单击该链接,它将显示您在本地网络服务器上的内容(如果您没有,则会收到 404)。您当然可以将其设置为您想要的任何页面/端口:

          http://smackaho.st:54878/twitter/callback

          【讨论】:

          【解决方案8】:

          我在本地主机上使用 Twitter 回调 url。如果您不确定如何创建虚拟主机(这很重要),请使用 Ampps。他真的很酷很容易。只需几个步骤,您就拥有了自己的虚拟主机,然后每个 url 都可以在上面运行。例如:

          1. 下载并安装放大器

          2. 添加新域。 (在这里您可以设置例如 twitter.local),这意味着您的虚拟主机将是 http://twitter.local,它将在第 3 步之后工作。

          3. 我正在开发 Win,所以转到您的主机文件 -> C:\Windows\System32\Drivers\etc\hosts 并添加行:127.0.0.1 twitter.local

          重新启动您的 Ampps,您就可以使用您的回调了。你可以指定任何 url,即使你正在使用一些框架 MVC 或者你有 htaccess url 重写。

          希望有帮助! 干杯。

          【讨论】:

          • 感谢您的提示。在linux上,只需将开发域名添加到/etc/hosts
          【解决方案9】:

          当我在本地进行开发时,我总是设置一个本地托管的开发名称来反映我正在处理的项目。我通过 xampp\apache\conf\extra\httpd-vhosts.conf 在 xampp 中设置它,然后在 \Windows\System32\drivers\etc\hosts 中进行设置。

          因此,如果我为 example.com 设置本地开发站点,我会在这两个文件中将其设置为 example.dev。

          简短回答: 正确设置后,您可以在设置 Twitter 应用程序时将此 URL (http://example.dev) 视为实时(而不是本地)。

          这里给出了类似的答案:https://dev.twitter.com/discussions/5749

          直接引用(强调):

          您可以提供具有我们在 申请详情页面。 OAuth 1.0a 要求您发送一个 oauth_callback 流的请求令牌步骤的值,我们将 在该步骤中接受基于动态本地主机的回调

          这对我来说就像一个魅力。希望这会有所帮助。

          【讨论】:

            【解决方案10】:

            Fiddler可以很方便地完成:

            • 打开菜单工具>主机...
            • 插入类似127.0.0.1 your-production-domain.com 的行,确保选中“启用请求重新映射...”。不要忘记按保存
            • 如果需要访问您的真实生产服务器,只需退出 Fiddler 或禁用重新映射。
            • 再次启动 Fiddler 将打开重新映射(如果已选中)。

            一个令人愉快的好处是您可以指定自定义端口,如下所示: 127.0.0.1:3000 your-production-domain.com(不可能通过主机文件实现)。此外,您可以使用任何域名(例如,localhost)代替 IP。

            这样,可以(但不是必须)只注册一次 Twitter 应用程序(前提是您不介意在本地开发和生产中使用相同的密钥)。

            【讨论】:

              【解决方案11】:

              TwitterAPIExchange.php#180

              行编辑此函数
              public function performRequest($return = true)
              {
                  if (!is_bool($return)) 
                  { 
                      throw new Exception('performRequest parameter must be true or false'); 
                  }
              
                  $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');
              
                  $getfield = $this->getGetfield();
                  $postfields = $this->getPostfields();
              
                  $options = array( 
                      CURLOPT_HTTPHEADER => $header,
                      CURLOPT_HEADER => false,
                      CURLOPT_URL => $this->url,
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_SSL_VERIFYPEER => false,
                      CURLOPT_SSL_VERIFYHOST => false
                  );
              
                  if (!is_null($postfields))
                  {
                      $options[CURLOPT_POSTFIELDS] = $postfields;
                  }
                  else
                  {
                      if ($getfield !== '')
                      {
                          $options[CURLOPT_URL] .= $getfield;
                      }
                  }
              
                  $feed = curl_init();
                  curl_setopt_array($feed, $options);
                  $json = curl_exec($feed);
                  curl_close($feed);
              
                  if ($return) { return $json; }
              }
              

              【讨论】:

              【解决方案12】:

              我遇到了同样的挑战,我无法将 localhost 作为有效的回调 URL。所以我创建了一个简单的域来帮助我们开发人员: https://tolocalhost.com

              它会将任何路径重定向到您需要的本地主机域和端口。希望对其他开发者有用。

              【讨论】:

              • 优秀的资源,但是您的域在 url 的末尾添加了“/”,这在某些情况下会导致 404。你能修好吗?例如它重定向为“localhost/somename/?,但它应该是”localhost/somename?
              • @Channa 我试图重现这一点,但脚本似乎工作正常。你使用的是什么浏览器?我尝试了 Chrome、Safari、Firefox,效果和预期一样。
              • Chrome 和 Firefox 都会发生这种情况。这是我在您的页面“localhost:8080/dashboard/twitterRedirect.jsp”中输入的主机名,但是当它重定向到“localhost:8080/dashboard/twitterRedirect.jsp/…”时,请注意问号前的“/”符号。这将导致我的应用向我发送 404
              • @Channa 您不应该将整个 URL 放在主机名字段中。它被称为:主机名,而不是 URL ;-) 这个想法是能够将“localhost”覆盖为:my.localhost.bla,然后它将使用它而不是 localhost。在您的情况下,主机字段需要是 localhost。您将端口设置为 8080 并将重定向配置为转到:tolocalhost.com/dashboard/twitterRedirect.jsp 这将重定向到:localhost:8080/dashboard/twitterRedirect.jsp
              【解决方案13】:

              现在http://127.0.0.1 似乎也停止了工作。 一个简单的解决方案是使用http://localtest.me 而不是http://localhost 它总是指向127.0.0.1 你甚至可以添加任意子域,它仍然会指向127.0.0.1

              Website

              【讨论】:

                【解决方案14】:

                在推特应用程序中设置回调网址:127.0.0.1:3000 并将 WEBrick 设置为绑定到 127.0.0.1 而不是 0.0.0.0

                命令:rails s -b 127.0.0.1

                【讨论】:

                  【解决方案15】:

                  看起来 Twitter 现在允许 localhost 与您在 Callback URL 设置中的任何内容一起使用,只要那里有一个值。

                  【讨论】:

                    【解决方案16】:

                    我为此苦苦挣扎并遵循了十几个解决方案,最后我所要做的就是使用本地主机上的任何 ssl api:

                    去下载:cacert.pem file

                    php.ini * 取消评论并更改: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

                    • 您可以通过在 CLI 中运行 php --ini 来找到您的 php.ini 文件在您的计算机上的位置
                    • 为方便起见,我将 cacert.pem 放在与 php.ini 相同的目录中。

                    【讨论】:

                      【解决方案17】:

                      这些是让 Facebook 在我的笔记本电脑上使用本地应用程序的有效步骤:

                      • 转到 apps.twitter.com
                      • 输入名称、应用说明和您的网站 URL 注意:对于 localhost:8000,请使用 127.0.0.1:8000,因为前者不起作用
                      • 输入与应用程序 TWITTER_REDIRECT_URI 中定义的回调 URL 匹配的回调 URL 注意:例如:http://127.0.0.1/login/twitter/callback(localhost 将不起作用)。
                      • 重要如果您想请求用户的电子邮件地址,请同时输入“隐私政策”和“使用条款”网址
                      • 选中同意条款复选框
                      • 单击 [创建您的 Twitter 应用程序]
                      • 切换到顶部的 [Keys and Access Tokens] 选项卡
                      • 将“Consumer Key(API Key)”和“Consumer Secret(API Secret)”复制到您的应用程序中的TWITTER_KEY和TWITTER_SECRET
                      • 单击“权限”选项卡并适当设置为“只读”、“读取和写入”或“读取、写入和直接消息”(使用您的应用程序所需的侵入性最小的选项,仅用于 OAuth 登录“读取只有”就足够了
                      • 如果您希望将用户的电子邮件地址返回到 OAuth 登录数据中,请在“附加权限”下选中“向用户请求电子邮件地址”复选框(在大多数情况下选择是)

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2011-05-30
                        • 1970-01-01
                        • 2011-01-25
                        • 2020-08-25
                        • 2018-07-02
                        • 2021-12-24
                        相关资源
                        最近更新 更多