Intereting Posts
Множественная выборка PHP для вставки нескольких строк в MySQL Должны ли вы всегда заканчивать mysql-запросы с помощью «или умереть?» загрузка изображения с летней загрузкой и альтернативная работа Как создать ссылку для профиля пользователя, например facebook для моей веб-страницы Является ли минус (отрицательный) нулевым эквивалентом 0 в PHP? что является самым надежным методом для получения файла с удаленного сервера в php PHP: Итерация по нескольким массивам и построение запроса SQL INSERT Отсутствует первый символ полей в csv mysql order by rand () проблема производительности и решение Лучшие практики в PHP и MySQL с международными строками Использование триггера в Oracle для регистрации изменений в таблице Laravel5.1: проверять поле времени (время начала должно быть больше конечного времени) Проверьте, подключен ли пользователь к facebook, а затем проверьте, понравилась ли ему страница Пароль MYSQL ENCRYPT, но как сделать DECRYPT Не удается сохранить символы UTF8 в MySQL

Проверить активное состояние пользователя с помощью laravel

Это довольно стандартная функция входа и проверка, которая работает хорошо. Но я также хочу проверить, что пользователь активен. Я установил столбец в моей таблице пользователей с «активным», установленным в 0 или 1.

public function post_login() { $input = Input::all(); $rules = array( 'email' => 'required|email', 'password' => 'required', ); $validation = Validator::make($input, $rules); if ($validation->fails()) { return Redirect::to_route('login_user') ->with_errors($validation->errors)->with_input(); } $credentials = array( 'username' => $input['email'], 'password' => $input['password'], ); if (Auth::attempt($credentials)) { // Set remember me cookie if the user checks the box $remember = Input::get('remember'); if ( !empty($remember) ) { Auth::login(Auth::user()->id, true); } return Redirect::home(); } else { return Redirect::to_route('login_user') ->with('login_errors', true); } } 

Я уже пробовал что-то вроде этого:

 $is_active = Auth::user()->active; if (!$is_active == 1) { echo "Account not activated"; } 

Но это можно использовать только в инструкции «auth try» if, и в этот момент учетные данные пользователей (email и pass) уже проверяются. Таким образом, даже если учетная запись пользователей, если она не активна, в данный момент, они уже вошли в систему.

Мне нужен способ вернуть валидацию, чтобы сообщить им, что они все равно должны активировать свою учетную запись и проверить, установлена ​​ли их учетная запись одновременно с проверкой их электронной почты и прохода.

Related of "Проверить активное состояние пользователя с помощью laravel"

Лучшим решением может стать создание драйвера Auth, который расширяет уже использованный драйвер Eloquent Auth, а затем переопределяет метод попытки.

Затем измените конфигурацию auth, чтобы использовать ваш драйвер.

Что-то вроде:

 <?php class Myauth extends Laravel\Auth\Drivers\Eloquent { /** * Attempt to log a user into the application. * * @param array $arguments * @return void */ public function attempt($arguments = array()) { $user = $this->model()->where(function($query) use($arguments) { $username = Config::get('auth.username'); $query->where($username, '=', $arguments['username']); foreach(array_except($arguments, array('username', 'password', 'remember')) as $column => $val) { $query->where($column, '=', $val); } })->first(); // If the credentials match what is in the database we will just // log the user into the application and remember them if asked. $password = $arguments['password']; $password_field = Config::get('auth.password', 'password'); if ( ! is_null($user) and Hash::check($password, $user->{$password_field})) { if ($user->active){ return $this->login($user->get_key(), array_get($arguments, 'remember')); } else { Session::flash('authentication', array('message' => 'You must activate your account before you can log in')); } } return false; } } ?> 

На экране входа в систему проверьте Session: get ('authentication') и обработайте соответственно.

Кроме того, разрешите им войти в систему, но не позволяйте им обращаться к другим страницам, кроме тех, которые предлагают ссылку для повторной отправки электронного письма активации.

Фильтры – это путь. Для решения этой проблемы легко и просто, см. Мой пример ниже.

 Route::filter('auth', function() { if (Auth::guest()) { if (Request::ajax()) { return Response::make('Unauthorized', 401); } else { return Redirect::guest('login'); } } else { // If the user is not active any more, immidiately log out. if(Auth::check() && !Auth::user()->active) { Auth::logout(); return Redirect::to('/'); } } }); из Route::filter('auth', function() { if (Auth::guest()) { if (Request::ajax()) { return Response::make('Unauthorized', 401); } else { return Redirect::guest('login'); } } else { // If the user is not active any more, immidiately log out. if(Auth::check() && !Auth::user()->active) { Auth::logout(); return Redirect::to('/'); } } }); 

Не можете ли вы использовать что-то вроде этого:

 if (Auth::once($credentials)) { if(!Auth::user()->active) { Auth::logout(); echo "Account not activated"; } } из if (Auth::once($credentials)) { if(!Auth::user()->active) { Auth::logout(); echo "Account not activated"; } } 

Просто сделайте активное поле одним из подтверждений. Вы можете сделать это:

 $credentials = array( 'username' => $input['email'], 'password' => $input['password'], 'active' => 1 ); if (Auth::attempt($credentials)) { // User is active and password was correct } 

Если вы хотите конкретно указать пользователю, что они неактивны, вы можете следить за этим:

  if (Auth::validate(['username' => $input['email'], 'password' => $input['password'], 'active' => 0])) { return echo ('you are not active'); } 

Вот что я делаю:

 if (\Auth::attempt(['EmailWork' => $credentials['EmailWork'], 'password' => $credentials['Password']], $request->has('remember'))) { if (\Auth::once(['EmailWork' => $credentials['EmailWork'], 'password' => $credentials['Password']])) { if (!\Auth::user()->FlagActive == 'Active') { \Auth::logout(); return redirect($this->loginPath()) ->withInput($request->only('EmailWork', 'RememberToken')) ->withErrors([ 'Active' => 'You are not activated!', ]); } } return redirect('/'); } return redirect($this->loginPath()) ->withInput($request->only('EmailWork', 'RememberToken')) ->withErrors([ 'EmailWork' => $this->getFailedLoginMessage(), ]); из if (\Auth::attempt(['EmailWork' => $credentials['EmailWork'], 'password' => $credentials['Password']], $request->has('remember'))) { if (\Auth::once(['EmailWork' => $credentials['EmailWork'], 'password' => $credentials['Password']])) { if (!\Auth::user()->FlagActive == 'Active') { \Auth::logout(); return redirect($this->loginPath()) ->withInput($request->only('EmailWork', 'RememberToken')) ->withErrors([ 'Active' => 'You are not activated!', ]); } } return redirect('/'); } return redirect($this->loginPath()) ->withInput($request->only('EmailWork', 'RememberToken')) ->withErrors([ 'EmailWork' => $this->getFailedLoginMessage(), ]);