跳到主要内容
PHP

laravel sanctum多用户

管

管理员

PHP

2023年09月13日 1,644 次阅读
本页目录
在您的控制器中,在创建令牌时将角色作为能力传递
 
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'], ['admin'])->plainTextToken;

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

return response($response, 201);
}
然后就可以使用TokenAbility中间件来识别用户角色(注意必须使用,不然造成多用户混乱,前台用户token可以登录后台!)

// routes/api.php
Route::group(['middleware' => ['auth:sanctum','ability:admin']], function() {
 //
});

或者

// routes/api.php
Route::group(['middleware' => ['auth:sanctum','abilities:admin']], function() {
 //
});

同样,您可以为您的用户角色创建能力。

当然,您必须将以下内容添加到 app/Http/Kernel.php 中的 $routeMiddleare 中才能使上述解决方案起作用

'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,
'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
关于如何获取user实例

auth()->user(); //不需要指定guard,因为在中间件中 ‘auth:sanctum’ 或者其他 ‘auth:admin’ 已经指定了guard,这里auth可以直接获取到guard

您可以在官方文档中了解更多相关信息  Laravel Sanctum

 

stack https://stackoverflow.com/questions/71358904/laravel-sanctum-multiple-guard-middleware

Related

相关文章

同分类文章 →
2026年07月11日 PHP

laravel什么样的方法适合放在模型中?什么适合用专门的服务类? cachedFavIds适合放在模型中吗?

一、适合放在模型中的方法Laravel 采用 ActiveRecord 风格,模型本身就是"数据 + 围绕该数据的操作"的载体。以下几类方法适合放模型: 关联关系:belongsTo、morphTo、hasMany 等。如 UserFav::userfavable()、UserFav::us

2026年04月13日 PHP

Vue3 静态文件放在同域名 Laravel 项目下

核心思路是:Vue3 构建后的静态文件放到 Laravel 的 public/ 目录下,通过 Laravel 路由的 catch-all 机制让 SPA 的前端路由正常工作。方案说明以 xx.com/admin 为例,整体架构如下:请求流程:xx.com/admin/* → Laravel

2025年08月18日 PHP

Laravel Eloquent 中可以通过静态方式调用的方法

在 Laravel Eloquent 中,可以通过静态方式调用的方法包括:1. 查询作用域 (Scopes)// 可以静态调用UserComment::active()->get();UserComment::where('status', 1)->first();2. Eloquent 内置的查询方法UserComment::fi

WeChat

扫码加我微信

微信二维码