2016-11-15 160 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

對於這種用例,請使用中間件。 :)

php artisan make:middleware UserProfileComplete 

然後用此代替handle功能:

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); 
} 

然後轉到您App\Http\Kernel.php這增加$routeMiddleware

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

最後,在你routes.php你可以做

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

很好的答案。除此之外,這是行不通的,因爲由於中間件不匹配,所以「完成」路線將永遠不會到達。這將以無限循環結束。正確的方法是,在「auth」組中設置完整路由,並在上述中間件組內部設置其他帳戶路由。如果我錯了,請糾正我的錯誤! –

+0

@JanWillem完全同意它。現在修復...謝謝:) – prateekkathal