Laravel Passport 是一个 OAuth2 服务器实现,它主要用于 API 认证。默认情况下,Passport 会使用 Laravel 的 users
表来存储客户端和用户信息。然而,有时候你可能需要将 Passport 与不同的表一起使用。
OAuth2 是一种授权框架,允许第三方应用访问用户的资源,而不需要获取用户的密码。Passport 提供了实现 OAuth2 服务器所需的所有组件。
Passport 支持多种授权类型,包括:
Passport 适用于需要保护 API 端点的应用,例如:
如果你需要将 Passport 与不同的表一起使用,可以通过自定义 Passport
的配置来实现。
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class CustomUser extends Authenticatable
{
// 自定义字段和方法
}
AuthServiceProvider
:namespace App\Providers;
use Illuminate\Support\Facades\Auth;
use Laravel\Passport\Passport;
use App\Models\CustomUser;
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::useCustomTokenStore(new CustomTokenStore);
Auth::provider('custom', function ($app, array $config) {
return new CustomUserProvider($app['hash'], $config['model']);
});
}
}
namespace App\Providers;
use Laravel\Passport\TokenRepository;
use Laravel\Passport\Token;
use Illuminate\Support\Facades\DB;
class CustomTokenStore implements TokenRepository
{
public function create(array $token)
{
return DB::table('custom_tokens')->insertGetId($token);
}
public function update(Token $token)
{
DB::table('custom_tokens')
->where('id', $token->id)
->update($token->toArray());
}
public function delete(Token $token)
{
DB::table('custom_tokens')->where('id', $token->id)->delete();
}
public function find($id)
{
return DB::table('custom_tokens')->find($id);
}
public function forClient($clientId)
{
return DB::table('custom_tokens')
->where('client_id', $clientId)
->get();
}
public function forUser($userId)
{
return DB::table('custom_tokens')
->where('user_id', $userId)
->get();
}
}
namespace App\Providers;
use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;
class CustomUserProvider extends EloquentUserProvider
{
public function retrieveById($identifier)
{
return $this->createModel()->find($identifier);
}
public function retrieveByToken($identifier, $token)
{
return $this->createModel()->where('id', $identifier)->where('api_token', $token)->first();
}
public function updateRememberToken(UserContract $user, $token)
{
$user->setRememberToken($token);
$user->save();
}
}
config/auth.php
:'providers' => [
'users' => [
'driver' => 'custom',
'model' => App\Models\CustomUser::class,
],
],
通过以上步骤,你可以将 Laravel Passport 与不同的表一起使用,从而满足特定的业务需求。
领取专属 10元无门槛券
手把手带您无忧上云