Auth:Sanctum怎么实现多账号库接口认证
场景:
A账号和Token都在A库;
B账号和Token都在B库;
AB账号请求的接口是分开的;
自定义PersonalAccessToken是全局的,只能认证A或B,不能同时认证。我想要分接口AB账号都能认证,怎么搞?
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
我的解决办法:
重点是切换token的库
指定b账号token数据库
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;
class PersonalAccessToken extends SanctumPersonalAccessToken
{
// 指定库
protected $connection = 'b';
}
AuthServiceProvider加入自定义b账号认证,
Auth::viaRequest('b_auth', function (Request $request) {
$token = str_replace('Bearer ','',$request->header('authorization'));
$item = PersonalAccessToken::findToken($token);
if($item) {
return $item->tokenable_type::find($item->tokenable_id);
}
return null;
});
auth.php 配置 guards 加入 “b_auth”,providers加入b账号的model
'guards' => [
....,
'aapi' => [
'driver' => 'sanctum',
'provider' => 'a_user',
],
'bapi' => [
'driver' => 'b_auth',// 自定义的看守器
'provider' => 'b_user',
],
],
'providers' => [
'a_users' => [
'driver' => 'eloquent',
'model' => App\Models\User\AUser::class,
],
'b_user' => [
'driver' => 'eloquent',
'model' => App\Models\Account\BUser::class,
],
],
本作品采用《CC 协议》,转载必须注明作者和本文链接
a库认证失败,在b库下认证一次,这样应该可以,如果两次都失败才是真正的失败
你viaRequest时直接
这样行不行 :joy:
前端请求带参数区分