2016-10-19 1 views
1

私は登録ユーザーの電子メールを確認するためにLaravelで 'jrean'パッケージを使用しています。 https://packagist.org/packages/jrean/laravel-user-verification電子メールが確認されない場合、Laravelのユーザーログインを制限する方法

私が現在直面している問題は、ユーザーが登録されていても、電子メールが確認されない限り、自分のアクセスを制限する方法です。私は登録を実装するためのパッケージチュートリアルに記載されているすべての手順に従ってきました。しかし、ログインアクセスを制限するための手順はありません。何か案は?

答えて

2

create simple middlewareとなり、メールが確認されているかどうか確認してください。 verifiedusersテーブルにブールある場合たとえば、あなたはこれを行うことができます:

public function handle($request, Closure $next) 
{ 
    return auth()->user() && auth()->user()->verified 
     ? $next($request); // Will pass user. 
     : redirect('/'); // Will redirect user to the main page if email is not verified. 
    }  
} 

を保護したいregister middlewareに忘れて、ルート(複数可)にそれを適用しないでください。

+0

しかし、彼らはすでに彼らのパッケージに2つのミドルウェアを持っていると思いますか? '$ this->ミドルウェア( 'guest'、['except' => ['getVerification'、 'getVerificationError']]))' – SanketR

2

ログイン方法を上書きすることができます。 L5.2とasummingでは、あなたが何かを行うことができますブールあるユーザーテーブルの検証フィールドがあります:あなたのアプリで

を/ HTTP /コントローラ/認証/ AuthController.php追加し、何かのように:

use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Support\Facades\Auth; 

    /** 
     * Handle a login request to the application. 
     * 
     * @param \Illuminate\Http\Request $request 
     * @return \Illuminate\Http\Response 
     */ 
     public function login(Request $request) 
     { 
     $this->validateLogin($request); 
     $throttles = $this->isUsingThrottlesLoginsTrait(); 
     if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) { 
      $this->fireLockoutEvent($request); 
      return $this->sendLockoutResponse($request); 
     } 
     $credentials = $this->getCredentials($request); 
     if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) { 
      if (Auth::user()->verified == true) { // This is the most important part for you 
      return $this->handleUserWasAuthenticated($request, $throttles); 
      } else { 
      Auth::logout(); 
      return $this->sendFailedLoginResponse($request, "Some message here"); 
      } 
     } 
     if ($throttles && !$lockedOut) { 
      $this->incrementLoginAttempts($request); 
     } 
     return $this->sendFailedLoginResponse($request); 
     } 

変更されたログインメソッドで使用するには、検証されたフィールドをユーザーの雄弁モデルに追加する必要もあります。

希望すると助かります!

関連する問題