92

我打算从我的本地主机连接到 Facebook 聊天。我需要从 Facebook 获取会话密钥。当我将站点 URL 指定为localhost:8080ip-address:8080它不起作用时。

我阅读了有关设置两个具有 2 个不同 API 密钥的应用程序的信息,一个在 dev m/c 上运行,另一个在 localhost 上运行,但我不太明白。

谁能解释如何在 localhost 上运行 Facebook 应用程序?

4

13 回答 13

77

前段时间我写了一篇关于这个 的教程。

最重要的一点是“站点 URL”:

网站网址: http://localhost/app_name/

文件夹结构类似于:

app_name
¦   index.php
¦
+---canvas
¦   ¦   index.php
¦   ¦
¦   +---css
¦           main.css
¦           reset.css
¦
+---src
        facebook.php
        fb_ca_chain_bundle.crt

编辑:
Kavya即使没有 IP 或端口,FB 服务器如何识别我的本地主机?

我认为这与 Facebook 没有任何关系,我因为 iframesrc参数是从客户端加载的,所以它会将您的本地 URL 视为直接放在浏览器上。

例如,在您的在线服务器上有一个包含内容的文件(例如online.php):

<iframe src="http://localhost/test.php" width="100%" height="100%">
    <p>Not supported!</p>
</iframe>

在您的本地主机根目录上,有文件test.php

<?php echo "Hello from Localhost!"; ?>

现在访问http://your_domain.com/online.php你会看到你的 localhost 文件的内容!

这就是为什么实时订阅和取消授权回调(仅提一下)不适用于 localhost URL!因为 Facebook 会 ping(发送 http 请求)到这些 URL,但显然 Facebook 服务器不会将这些 URL 转换为您的 URL!

于 2011-02-28T11:58:00.123 回答
29

如果您使用本地主机:

在 Facebook-->Settings-->Basic,在“App Domains”字段中输入“localhost”,然后点击“+Add Platform”选择“Web Site”,

它将创建两个字段“Mobile Site URL”和“Site URL”,在“Site URL”中再次写入“localhost”。

为我工作。

于 2014-06-19T10:52:54.750 回答
23

您还可以编辑“主机”文件并创建域的本地变体。

例子

如果您的真实 Facebook 应用程序地址是“example.com”,您可以在指向“localhost”的“hosts”文件中创建“localhost.example.com”(只能从您的电脑访问)域,并在此域下运行您的本地网站。您可以通过这种方式欺骗 Facebook。

于 2013-01-04T21:08:49.293 回答
7

在您的应用程序的基本设置 ( https://developers.facebook.com/apps ) 下的 Settings->Basic->选择您的应用程序如何与 Facebook 集成...

使用“站点 URL:”和“移动站点 URL:”来保存您的生产和开发 URL。两个站点都将被允许进行身份验证。我只是使用 Facebook 进行身份验证,所以我不需要任何移动站点重定向功能。我通常在测试身份验证时将“Mobile Site URL:”更改为“localhost:12345”站点,然后在完成后将其恢复正常。

于 2013-02-27T23:39:50.750 回答
6

2013 年 8 月。Facebook 不允许为应用程序设置带有端口的域,例如“localhost:3000”。

因此,您可以使用https://pagekite.net将您的隧道localhost:port传送到正确的域。

Rails 开发人员可以免费使用http://progrium.com/localtunnel/

  • Facebook当时只允许一个应用程序域。如果您尝试添加另一个,作为 localhost,它将显示有关域的某种不同的错误。确保当时只使用一个域进行回调和应用程序域设置。
于 2013-08-25T06:49:00.740 回答
4

所以我今天得到了这个工作。我的网址是http://localhost:8888。我给 facebook 的域是 localhost。我认为它不起作用,因为我试图使用该FB.api方法提取数据。我不断得到一个“未定义”的名称和一个没有来源的图像,所以绝对无法访问图表。

后来我意识到我的问题实际上是我只是传递了/meto的第一个参数FB.api,而且我没有令牌。因此,您需要使用该FB.getLoginStatus函数来获取一个标记,该标记应添加到/me参数中。

于 2012-02-23T05:50:08.037 回答
2

好的,我不确定这些答案是怎么回事,但我会告诉你什么对我有用,正如我工作中的高级开发人员所建议的那样。我正在使用 Ruby on Rails 并使用 Facebook 的 JavaScript 代码获取访问令牌。

问题:为了进行身份验证,Facebook 会从您的地址栏中获取 url,并将其与文件中的内容进行比较。localhost:3000无论出于何种原因,它们都不允许您使用。但是,您可以使用完全虚构的域名,例如yoursite.dev通过运行本地服务器并指向本地主机所yoursite.dev指向127.0.0.1:3000的任何位置。

第 1 步:安装或更新 Nginx

$ brew install nginx(安装)或$ brew upgrade nginx(更新)

第 2 步:打开您的 nginx 配置文件

/usr/local/etc/nginx/nginx.conf(通常在这里)

/opt/boxen/config/nginx/nginx.conf(如果你使用博森)

第 3 步将这段代码添加到您的http {}块中

替换proxy_pass为您要指向的任何位置yoursite.dev。在我的情况下,它正在替换 localhost:3000 或等效的127.0.0.1:3000

server {
  listen       yoursite.dev:80;
  server_name  yoursite.dev;
  location / {
    proxy_pass http://127.0.0.1:3000;
  }
}

第 4 步/etc/hosts在 Mac 上编辑您的主机文件以包含

127.0.0.1   yoursite.dev

此文件将域定向到 localhost。Nginx 侦听 localhost 并在匹配规则时重定向。

第 5 步:以后每次使用开发环境时,都使用yoursite.dev地址栏中的 ,而不是localhost:3000让 Facebook 正确登录。

于 2014-11-08T06:58:39.883 回答
2

只需将您的画布 url 指定为http://localhost/app_path

于 2011-02-28T06:36:55.587 回答
1

Forward 是帮助在本地开发 facebook 应用程序的好工具,它支持 SSL,因此证书不是问题。

https://forwardhq.com/in-use/facebook

免责声明:我是开发人员之一

于 2013-02-06T01:00:38.200 回答
0

您需要将您的应用程序设置为在 localhost 的 https 上运行

您可以按照本文中给出的步骤在 ubuntu 上设置 HTTPS

https://www.digitalocean.com/community/articles/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-12-04

您需要执行以下步骤:

安装 apache(如果你没有)

sudo apt-get install apache2

第一步——激活 SSL 模块

sudo a2enmod ssl
sudo service apache2 restart

第二步——创建一个新目录

sudo mkdir /etc/apache2/ssl

第三步 - 创建自签名 SSL 证书

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache/ssl/apache.key -out /etc/apache2/ssl/apache.crt

使用此命令,我们将创建自签名 SSL 证书和保护它的服务器密钥,并将它们都放入新目录中。最重要的一行是“通用名称”。在此处输入您的官方域名,或者,如果您还没有,请输入您网站的 IP 地址。

通用名称(例如服务器 FQDN 或您的姓名)[]:example.com 或 localhost

第四步——设置证书

sudo vim /etc/apache2/sites-available/default-ssl

查找以下行并使用您的设置进行编辑

服务器名称 localhost 或 example.com

SSLCertificateFile 上的 SSLEngine /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

第五步——激活新的虚拟主机

sudo a2ensite default-ssl
sudo service apache2 reload
于 2014-04-25T13:40:12.467 回答
0

一个恶作剧:

使用MAMPPRO并创建: 服务器名称:您网站的确切地址(例如:helloworld.com)到您磁盘上的站点

在 Facebook 上: 因此您也可以保留原始站点 URL(例如:helloworld.com)

现在您明白了,当您在地址栏上键入您的网站时,您就在本地!..当你想上网时,只需在 MAMP PRO 上停用服务器 ..

:)

于 2014-05-09T19:47:57.450 回答
0

在我的情况下,问题显示为 chrome 阻止了从 localhost:4200 到 facebook api 网站的 CORS 请求。使用以下设置运行 Chrome: "YOUR_PATH_TO_CHROME\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="c:/chrome 在开发过程中就像一个魅力。即使没有本地主机添加到 facebook 应用程序的设置。

于 2019-04-15T16:43:32.930 回答
0

上面的答案都不适合我。我在 FB API 2.5 上运行。我的问题是解决后导致成功的问题的组合

  1. 创建一个测试应用程序以确保对其进行维护和管理,并且可以在上线时禁用
  2. 正确阅读错误消息:) - 我必须启用“Web OAuth Login”和“Client OAuth Login”
  3. 使用https://www.whatismyip.com/找出我当前的 IP 是什么
  4. 在我的域上创建一个 A 记录,即 指向我当前 IP 的http://localhost.mydomain.com

这可能并不理想,因为动态 IP 的变化可能会使用 DynDNS 或类似的东西来使 IP 更加“静态”,但它对我有用

于 2016-03-10T20:34:22.983 回答