【问题标题】:How to let the Facebook scraper into dynamic, authenticated pages如何让 Facebook 刮板进入动态的、经过身份验证的页面
【发布时间】:2013-01-23 11:28:09
【问题描述】:

我有一个社交网络,在用户进入之前需要进行身份验证和电子邮件验证。一旦进入,用户只能看到他们朋友的内容。它实际上非常简单,即使听起来不那么简单。这是我在过滤器之前的身份验证:

  def authenticate
    if logged_in?
      redirect_to authentication_url if current_user.account_disabled
    else
      redirect_to root_url
    end
  end

我遇到的问题是让 Facebook 抓取工具从一些动态页面中获取元标记。我read,您可以允许 Facebook 的用户代理进入非公共页面,但对于在robots.txt 文件中受保护的页面,不是这样吗?我没有使用刮刀的经验,但它肯定需要一个 cookie 和一个启用的帐户来刮取我网站上的动态信息?我什至不确定如何实际编写让刮板进入的方法或在哪里编写。

我会考虑为刮板生成一个带有SecureRandom.urlsafe_base64 的令牌,并在普通用户无法访问的空白页面(带有元数据)上进行例外处理,但从技术上讲这并不安全,考虑到如果您查看了正确的 JS 文件(对于 Open Graph 操作 POST 中的 URL 引用)和元标记,您可以获得受保护的用户数据。这个想法似乎并不接近正确......

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby facebook facebook-opengraph scraper


    【解决方案1】:

    用户代理很容易被伪造。请小心允许仅基于用户代理的访问。

    我相信他们有办法允许通过 api 进行抓取。

    【讨论】:

      【解决方案2】:

      只要您的内容具有每个用户看到的唯一 URL(通常受登录过滤器保护),您就可以通过检查源 IP 或用户代理以匹配 Facebook 抓取工具来允许访问。

      但是,与大多数社交网站一样,您可能会使用相同的 URL 来返回为当前登录用户呈现的自定义内容。这本质上是不可回收的 - 因为每个用户都有不同版本的 say '/profile'。

      【讨论】:

      • 谢谢!内容具有唯一的 URL。你能指出我使用什么代码以及在哪里使用它的正确方向吗?我在想,通过在应用程序控制器中的操作中添加一个 if 语句,比如 request.env["HTTP_USER_AGENT"] 应该没问题。这是一个好方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2013-01-27
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多