Запомнить меня для пользователей на Laravel
В Laravel есть удобный механизм для запоминания пользователей. Он отмечен в мануале и в нём, по сути, нет ничего сложного. Для реализации механизма таблица users должна содержать строковый столбец remember_token, в котором Laravel будет хранить токен. Поэтому в миграции Users должна быть такая строка:
class CreateUsersTable extends Migration public function up() { ... $table->rememberToken(); ... } |
Из HTML для его реализации нужен лишь чекбокс «Запомнить меня», расположенный в форме авторизации. У меня он такой:
<label> <input type="checkbox" name="remember_me" /> <span>Запомнить меня</span> </label> |
Авторизация с учетом запоминания пользователя будет такой (использую email в качестве логина)
public function login(Request $request) { ... if (Auth::attempt([ 'email' => $request->get('email'), 'password' => $request->get('password') ],($request->get('remember_me')=='on' ? true : false))) { //здесь код при удачной авторизации } ... } |
то есть в случае выбранного чекбокса Laravel активизует механизм запоминания пользователя, установит куки и запишет токен в таблицу Users в поле remember_token. Для этого всего лишь нужно указать true в третьем параметре!!!
Для проверки авторизации пользователя нужно использовать такую комбинацию:
if (Auth::check() || Auth::viaRemember()) //пускаем только авторизованных { return redirect('/dashboard'); // у меня редирект в админку } else { return redirect('/login'); // страница логина } |
Метод Auth::viaRemember() проверяет авторизацию через куки и токен. И всё, больше никаких телодвижений не нужно.