我正在运行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,
答案 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