2016-11-18 7 views
0

私はFacebookにリンクを共有する必要がある私のlaravelアプリにいくつかのページがあります。ミドルウェアのFacebookクローラを検出

私はそれを共有するとFacebookはミドルウェアによってリダイレクトされるため、ログインページからプロパティog:imageを取得します。

here私はFacebookのユーザーエージェントを検出して、Facebookにリンクを表示するためのopenGraphプロパティしか持たない公開ページにリダイレクトする必要があることがわかりました。

それは唯一の方法ですか?

私は、私はそれをどのように行う必要があります任意のidean ...それはとても素敵ではない、私が持っているすべて貴様の国民のページを管理するために、内部のスイッチで、ミドルウェアを作成

を終わるでしょう?

私はそれは私自身のミドルウェアを作成する解決
+0

なぜFacebookのクローラを検出する必要がありますか? – WizKid

+0

ログイン保護ページを共有しようとしていますか? –

+0

コンテンツを公に共有したい場合は、そのコンテンツも一般公開されている方が良いでしょう。私のニュースフィードにあなたの共有リンクの1つが表示されたら、最後にログインページにリダイレクトされるだけです。 – CBroe

答えて

1

:RedirectCrawlers

<?php 

namespace App\Http\Middleware; 

use App\Tournament; 
use Closure; 
use Illuminate\Support\Facades\Route; 

class RedirectCrawlers 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $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)) { 
      switch (Route::getCurrentRoute()->getPath()) { 
       case "tournaments/{tournament}/register": 
        $tournament = Tournament::where('slug', $request->tournament)->first(); 
        return view('public/register', compact('tournament')); 
      } 
     } 
     return $next($request); 
    } 
} 

は、その後、私は公共のページであること

<meta property="og:title" content="{{trans('core.competitors_register') }}"/> 


<meta name="description" content="Registrate en el torneo {{ $tournament->name }}"/> 
<meta property="og:description" content="Registrate en el torneo {{ $tournament->name }}"/> 
<meta property="og:type" content="website"/> 
<meta property="og:image" content="https://kendozone.com/wp-content/uploads/2016/04/home.jpg"/> 
<meta property="og:image:secure_url" content="https://kendozone.com/wp-content/uploads/2016/04/home.jpg"/> 
<meta property="og:url" content="{{$request->url()}}"/> 
<meta property="fb:app_id" content="780774498699579"/> 

<meta name=" twitter:title" content="{{trans('core.competitors_register')}}"/> 
<meta name="twitter:image" content="https://kendozone.com/wp-content/uploads/2016/04/home.jpg"/> 
<meta name="twitter:card" content="summary"/> 
<meta name="twitter:description" content="Registrate en el torneo {{ $tournament->name }}"/> 

register.blade.php /公共/リソース/ビューを作成し、それを単にFacebookに共有するために必要な情報があります。それは公共のページにリダイレクトするよう

は、その後のApp \のHttp \ Kernel.phpに私は、認証ミドルウェアの前に、「ウェブ」で$ middlewareGroups内部のルートを追加します。

 \App\Http\Middleware\RedirectCrawlers::class, 

ソリューションはStackOverflowの中に存在します、コメントはありますが、Laravel 5.3はそれほどありません!

希望すると助かります!

関連する問題