Я использую пакет ‘jrean’ в Laravel для проверки писем зарегистрированных пользователей.
https://packagist.org/packages/jrean/laravel-user-verification
Проблема, с которой я сталкиваюсь в настоящее время, — даже если пользователь зарегистрирован, как я могу ограничить его доступ, пока электронная почта не будет проверена. Я выполнил все шаги, описанные в руководстве к пакету, для осуществления регистрации. Но у них нет перечисленных шагов для ограничения доступа к логину. Есть идеи?
Вы можете создать простое промежуточное ПО и проверьте, подтвержден ли там адрес электронной почты. Например, если 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.
}
}
Не забудь зарегистрировать промежуточное ПО и примените его к маршруту (маршрутам), который вы хотите защитить.
Вы можете переписать свой метод входа в систему. В L5.2 и выше, у вас есть проверенное поле в таблице пользователей, которое является логическим, вы можете сделать что-то вроде:
В вашем приложении / Http / Controllers / 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);
}
Вам также необходимо добавить проверенное поле в модель eloquent пользователя, чтобы использовать его в измененном методе входа в систему.
Надеюсь, поможет!