首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel passport用于不同的表,而不是'users‘

Laravel Passport 是一个 OAuth2 服务器实现,它主要用于 API 认证。默认情况下,Passport 会使用 Laravel 的 users 表来存储客户端和用户信息。然而,有时候你可能需要将 Passport 与不同的表一起使用。

基础概念

OAuth2 是一种授权框架,允许第三方应用访问用户的资源,而不需要获取用户的密码。Passport 提供了实现 OAuth2 服务器所需的所有组件。

相关优势

  1. 安全性:OAuth2 提供了一种安全的授权方式,避免了直接传递用户密码。
  2. 灵活性:可以轻松地与不同的应用和服务集成。
  3. 标准化:OAuth2 是一个广泛接受的开放标准。

类型

Passport 支持多种授权类型,包括:

  • 授权码模式(Authorization Code Grant)
  • 隐式模式(Implicit Grant)
  • 密码模式(Resource Owner Password Credentials Grant)
  • 客户端凭证模式(Client Credentials Grant)

应用场景

Passport 适用于需要保护 API 端点的应用,例如:

  • Web 应用程序
  • 移动应用程序
  • 单页应用程序(SPA)

遇到的问题及解决方法

如果你需要将 Passport 与不同的表一起使用,可以通过自定义 Passport 的配置来实现。

自定义表

  1. 创建自定义用户模型
代码语言:txt
复制
namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class CustomUser extends Authenticatable
{
    // 自定义字段和方法
}
  1. 更新 AuthServiceProvider
代码语言:txt
复制
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']);
        });
    }
}
  1. 创建自定义 Token 存储
代码语言:txt
复制
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();
    }
}
  1. 创建自定义用户提供者
代码语言:txt
复制
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();
    }
}
  1. 更新 config/auth.php
代码语言:txt
复制
'providers' => [
    'users' => [
        'driver' => 'custom',
        'model' => App\Models\CustomUser::class,
    ],
],

参考链接

通过以上步骤,你可以将 Laravel Passport 与不同的表一起使用,从而满足特定的业务需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券