标签: sanctum

在 Laravel 9 中使用 Sanctum 创建没有“expires_at”列的令牌

我安装了 Laravel 9 和 Sanctum,进行了迁移,并尝试使用从 Authenticatable 扩展的 User 类中的“createToken”方法创建令牌。这一切都来自 Laravel 和 Sanctum 安装。我使用下面的代码。

createToken('secrettoken')->plainTextToken;
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

"message": "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'expires_at' in 'field list' (SQL: insert into `personal_access_tokens` (`name`, `token`, `abilities`, `expires_at`, `tokenable_id`, `tokenable_type`, `updated_at`, `created_at`) values (secrettoken, 4afa89fe2706656efae648c43c2a451b5b6d10be8b4e4558b6f9097706f814eb, [\"*\"], ?, 14, App\\Models\\User, 2022-08-02 19:30:00, 2022-08-02 19:30:00))
Run Code Online (Sandbox Code Playgroud)

似乎“createToken”方法想要填充不存在的“expires_at”列并且没有值。此方法有两个参数:名称和能力(可选)。

有人有和我一样的问题吗?也许我做错了什么或者使用了错误的方法。

authentication token laravel sanctum

6
推荐指数
1
解决办法
1万
查看次数

Laravel Sanctum 多重防护/中间件

我正在使用 Laravel Sanctum 和 Vuejs。我想分别以管理员和用户身份登录,当然他们的请求不应该互相到达。

我有用户(模型和控制器)和管理员(模型和控制器)

这就是我登录的方式(两个控制器分别像这样)

public function login(Request $request) {

$fields = $request->validate([
  'username' => 'required|string',
  'password' => 'required|string',
]);

$admin = Admin::where('username', $fields['username'])->first();

if (!$admin || !Hash::check($fields['password'], $admin['password'])) {
  return response([
    'error' => 'some error'
  ]);
}

$token = $admin->createToken($request['username'])->plainTextToken;

$response = [
  'admin' => $admin,
  'admin_token' => $token
];

return response($response, 201);
}
Run Code Online (Sandbox Code Playgroud)

我可以这样使用

// routes/api.php
Route::group(['middleware' => ['auth:sanctum']], function() {
 //
});
Run Code Online (Sandbox Code Playgroud)

但我真正想这样使用

// routes/api.php
Route::group(['middleware' => ['admin:sanctum']], function() {
 //
});
Run Code Online (Sandbox Code Playgroud)

我试过

  // config/sanctum.php …
Run Code Online (Sandbox Code Playgroud)

laravel sanctum

1
推荐指数
1
解决办法
7640
查看次数

标签 统计

laravel ×2

sanctum ×2

authentication ×1

token ×1