Поле rememberToken
Метод rememberToken используется в миграциях Laravel
для добавления специального поля remember_token
в таблицу пользователей. Это поле предназначено для
хранения уникального токена, который позволяет
автоматически аутентифицировать пользователя при
повторных посещениях сайта через механизм
"запомнить меня". В отличие от других полей,
rememberToken не принимает параметров и
автоматически создает колонку типа string длиной 100
символов с возможностью хранения NULL.
Синтаксис
<?php
Schema::create('table', function (Blueprint $table) {
$table->rememberToken();
});
?>
Пример использования в миграции
Давайте создадим таблицу пользователей с полем для токена запоминания:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
?>
Результат SQL запроса
Сгенерированный SQL-запрос для созданной таблицы:
CREATE TABLE users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
email_verified_at TIMESTAMP NULL,
password VARCHAR(255) NOT NULL,
remember_token VARCHAR(100) NULL,
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL
);
Использование в модели пользователя
Laravel автоматически использует поле remember_token при аутентификации:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
}
?>
Пример аутентификации с запоминанием
При входе в систему можно использовать метод attempt с параметром remember:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
$remember = $request->has('remember');
if (Auth::attempt($credentials, $remember)) {
$res = "Login successful";
echo $res;
return redirect()->intended('dashboard');
}
$res = "Invalid credentials";
echo $res;
return back()->withErrors(['email' => 'Invalid credentials']);
}
}
?>
Пример ручного обновления токена
Вы можете вручную обновить токен запоминания пользователя:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class UserController extends Controller
{
public function refreshToken($userId)
{
$user = User::find($userId);
if ($user) {
$user->remember_token = Str::random(60);
$user->save();
$res = "Token refreshed successfully";
echo $res;
} else {
$res = "User not found";
echo $res;
}
}
}
?>
Смотрите также
-
метод
string,
который создает строковое поле для таблицы -
метод
timestamps,
который добавляет поля created_at и updated_at -
класс
Blueprint,
который используется для построения схемы таблицы -
метод
create,
который создает новую таблицу в базе данных