2016-11-15 16 views
1

私が開発しているサイトでは、一部のユーザーはアカウントにサインアップできますが、登録プロセスは途中まで残しておきます。ログインする前にアカウントを完了してください(Laravel 5.2)

ただし、登録時にクリティカルステージを通過した場合、試してもログインできるようになります。この時点で、サイトにアクセスできるようになる前にアカウントの詳細を記入しなければならないページに誘導したいと考えています。

私は一種の不透水性の壁を作りたいと思っています。そのため、アカウントを使用する前に登録を完了する必要があります。現在のところ、ログインしたユーザーを次のようにリダイレクトするだけです:

public function authenticated($request, $user) 
{ 
    if ($user->regComplete == false) { 
     auth()->logout(); 
     flash('you are not verified'); 
     return redirect('/login'); 
    } 
    return redirect('/'); 
} 

ただし、一部のユーザーを上記のページにリダイレクトしたいと思います。私は、ベストプラクティスは、強制的なアカウント完了ページがある何のためにあるのかあまりわからない、しかし、この

if ($user->incomplete) { 
    return redirect('/account/complete'); 
} 

のようにそれらをリダイレクトします。

答えて

1

このような使用例については、Middlewaresをご利用ください。次に、あなたのApp\Http\Kernel.phpに行き、あなたが

を行うことができ routes.phpあなたの中に、最後に $routeMiddleware

protected $routeMiddleware = [ 
    'user.profile' => \App\Http\Middleware\UserProfileComplete::class, 
]; 

にこれを追加し

public function handle($request, Closure $next, $guard = null) { 
    // Please note here complete = 1 means user has completed his profile 
    if(!auth()->user()->complete) { 
    return redirect(route('user.account.complete')); 
    } 

    return $next($request); 
} 

::)

php artisan make:middleware UserProfileComplete 

はその後、これにhandle機能を置き換えます

Route::group('account', ['middleware' => ['auth']], function() { 

    Route::get('complete', '[email protected]')->name('user.account.complete'); 

}); 

Route::group(['middleware' => ['auth', 'user.profile']], function() { 

    //Routes which needs to check if profile is complete or not 

}); 

希望します。

+0

偉大な答えです。これを除いて、これはうまくいかないでしょう。なぜなら、ミドルウェアがマッチしていないため、 'complete'ルートには決して届かないからです。これは無限ループで終了します。適切な方法は、この完全なルートを 'auth'グループだけに設定し、上記のミドルウェアグループ内の他のアカウントルートを設定することです。私が間違っているなら、私を修正してください! –

+0

@JanWillem完全にそれに同意します。今修正しました...ありがとう:) – prateekkathal

関連する問題