允许Facebook获取受版权保护的页面(og meta)

时间:2018-01-04 10:49:55

标签: facebook laravel laravel-5.5

我正在运行Laravel 5.5并使用Laravel的基本身份验证。

我有一条名为“个人资料已完成”的路线,该路线使用中间件“ auth ”/用户必须登录才能看到该页面。

该路线(使用视图)具有创建Facebook的“共享对话框”(具有以下功能)的功能。问题是facebook无法获取 og:meta ,因为视图(路由)受到保护,并且通过facebook sharing debugger重定向到/login

Redirect Path   
Input URL   arrow-right https://www.url.com/profile-completed
302 HTTP Redirect   arrow-right https://www.url.com/login

如上所述,它会重定向到/ login,因此它会获取/ login页面的og:meta。

Facebook分享功能

FB.ui({
          method: 'share',
          href: '{{ env('APP_URL') }}',
          picture: '{{ asset('"img/share.png') }}',
      }, function( response ) {
        // do nothing
});

问题:我怎么能让Facebook获取og元甚至是受中间件保护的页面(视图/路由)?

它使用的中间件:

   protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

1 个答案:

答案 0 :(得分:0)

提到的问题是facebook的抓取工具无法获取受auth保护的网页。

我通过修改

来解决这个问题
  

供应商/框架/ SRC /照亮/认证/中间件/ Authenticate.php

将默认handle功能更改为:

public function handle($request, Closure $next, ...$guards)
{

    $crawlers = [
        'facebookexternalhit/1.1',
        'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)',
        'Facebot',
        'Twitterbot',
    ];

    $userAgent = $request->header('User-Agent');


    if (str_contains($userAgent, $crawlers)) {
        return $next($request);
    }
    else{
        $this->authenticate($guards);
    }

    return $next($request);

}

参考文献:

1)https://developers.facebook.com/docs/sharing/webmasters/crawler

2)https://stackoverflow.com/a/40748072/6140684