允许 facebook 获取受身份验证保护的页面(og meta)
Allow facebook to fetch page(og meta) which is auth protected
我是 运行 Laravel 5.5,我使用 Laravel 的基本身份验证。
我有一个名为“profile-completed”的路由,该路由使用中间件“auth”/必须登录用户为了看到那个页面。
该路线(使用视图)具有创建 "share dialog" 的功能 - 具有以下功能 - facebook。问题是 facebook 无法获取 og:meta,因为视图(路由)受到保护并且它重定向到 /login
,如通过 facebook sharing debugger 所见.
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 获取受中间件保护的页面 (view/route) 的 og meta?
它使用的中间件:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
提到的问题是 facebook 的爬虫无法获取受 auth
保护的页面。
我通过修改
解决了这个问题
Vendor/framework/src/Illuminate/Auth/Middleware/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)
我是 运行 Laravel 5.5,我使用 Laravel 的基本身份验证。
我有一个名为“profile-completed”的路由,该路由使用中间件“auth”/必须登录用户为了看到那个页面。
该路线(使用视图)具有创建 "share dialog" 的功能 - 具有以下功能 - facebook。问题是 facebook 无法获取 og:meta,因为视图(路由)受到保护并且它重定向到 /login
,如通过 facebook sharing debugger 所见.
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 获取受中间件保护的页面 (view/route) 的 og meta?
它使用的中间件:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
提到的问题是 facebook 的爬虫无法获取受 auth
保护的页面。
我通过修改
解决了这个问题Vendor/framework/src/Illuminate/Auth/Middleware/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)