2016-10-19 5 views
1

Я использую пакет «jrean» в Laravel для проверки электронной почты зарегистрированных пользователей. https://packagist.org/packages/jrean/laravel-user-verificationКак ограничить вход пользователя в Laravel, если адрес электронной почты не подтвержден

Проблема, с которой я столкнулся в настоящее время, даже если пользователь зарегистрирован, как я могу ограничить его доступ до тех пор, пока электронное письмо не будет проверено. Я выполнил все шаги, приведенные в учебнике пакета для внедрения регистрации. Но у них нет никаких шагов для ограничения доступа к логину. Есть идеи?

ответ

2

Вы можете create simple middleware и проверить, есть ли там электронная почта. Например, если verified является булево в users таблице, вы можете сделать это:

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-> middleware ('guest', ['except' => ['getVerification', 'getVerificationError']]);' – SanketR

2

Вы можете перезаписать свой метод входа. В L5.2 и asumming вас проверить поле в вашей таблице пользователей, которое булево вы можете сделать что-то вроде:

В приложении/Http/Контроллеры/Auth/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); 
     } 

Вам также необходимо добавить проверенное поле в модель User eloquent, чтобы использовать его в вашем модифицированном методе входа.

Надеюсь, это поможет!