sanctum多角色认证的问题
在项目中存在商户和客户两种身份,使用sanctum做的api认证,
但是问题是Merchant model
生成的token不能通过auth:merchant
中间件的验证,反而是Customer model
生成的token可以通过auth:merchant
中间件的验证。请问这块是否有对应的配置能让token和对应的验证项对应起来。
配置和代码如下:
config/auth.php
'guards' => [
'customer' => [
'driver' => 'sanctum',
'provider' => 'customers'
],
'merchant' => [
'driver' => 'sanctum',
'provider' => 'merchants'
]
],
'providers' => [
'customers' => [
'driver' => 'eloquent',
'model' => App\Models\Customer::class,
],
'merchants' => [
'driver' => 'eloquent',
'model' => App\Models\Merchant::class
]
],
Model
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Merchant extends Authenticatable
{
use HasFactory, SoftDeletes, HasApiTokens;
}
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Customer extends Authenticatable
{
use HasFactory, SoftDeletes, HasApiTokens;
}
merchant.route.php
Route::post('login', [LoginController::class, 'login']);
Route::middleware(['auth:merchant'])->group(function (){
Route::get('test', [ProductController::class, 'test']);
});
customer.route.php
Route::post('login', [LoginController::class, 'login']);
Route::middleware(['auth:customer'])->group(function (){
Route::get('test1', [ProductController::class, 'test1']);
});
MerchantController
public function login(Request $request)
{
$merchant = Merchant::query()->find(1);
$token = $merchant->createToken($merchant->name);
return $this->ok([
'token' => $token->plainTextToken
]);
}
CustomerController
public function login(Request $request)
{
$customer = Customer::query()->find(1);
$token = $customer->createToken($merchant->name);
return $this->ok([
'token' => $token->plainTextToken
]);
}