【问题标题】:Laravel Auth using Third Party AuthenticationLaravel Auth 使用第三方认证
【发布时间】:2019-10-23 14:04:18
【问题描述】:

我正在构建一个使用第三方身份验证数据库的应用程序。我有created a custom composer package 来“拦截”POST/login 的请求。一切都很好 - 我能够取回用户对象并将其保存到我的 (laravel) 数据库中。

我现在正处于想要重定向到主页并做“事情”的地步。如果可以的话,我想尽可能多地使用 Laravel 的原生 Auth

例如,在主页上我是这样做的:

$foo = auth()->user()->foo->where('active', 1);

毫不奇怪,因为我没有使用 Laravel 的原生 Auth 方法,auth()->user() 正在返回 null。在我的数据库中创建/找到我的用户后,是否可以重新绑定到 Laravel 的 auth() 方法?

感谢您的任何建议!

编辑

阅读文档,this looks like the direction I need to go,但我不了解如何连接/注册我的自定义包(我认为)...

编辑 2

我将继续更新此内容,因为我觉得我取得了任何进展,希望它不仅能帮助我,还能帮助其他人更好地了解我正在努力完成的工作。最终帮助其他可能尝试做同样事情的人。

我已经更新了我的app/Providers/AuthServiceProviderAuthServiceProvider

use My\Package\MyThirdPartyServiceProvider;


...


Auth::provider('foo', function ($app, array $config) {
        // Return an instance of Illuminate\Contracts\Auth\UserProvider...

    return new MyThirdPartyServiceProvider($app->make('foo.connection'));
});

我还更新了我的config/auth 文件:

'providers' => [
    'users' => [
        'driver' => 'foo',
        'model' => App\User::class,
    ]

【问题讨论】:

  • 您将需要一个类来实现Illuminate\Contracts\Auth\UserProvider 接口(在您的包中或在您的项目中)。该类可以通过在 auth.php 中配置并在服务提供者中注册来用作身份验证驱动程序。
  • 嗨,PtrTon - 请详细说明一下吗?我不关心我实现这个类的哪个项目。在高层次上,我不确定如何 来实现它。感谢您的宝贵时间!

标签: laravel laravel-6


【解决方案1】:

正如您提到的,documentation 建议实施自定义用户提供程序。以下步骤或多或少地描述了您将如何更详细地处理它。

  1. 创建或编辑service provider 你可以通过运行来创建一个新的服务提供者

php artisan make:provider CustomAuthServiceProvider

  1. 在您的服务提供商的boot 方法中,您必须配置我们的身份验证提供商(将在第 4 步中实施)。
    public function boot()
    {
        Auth::provider('custom-auth', function ($app, array $config) {
            return new CustomAuthProvider();
        });
    }
  1. 更新您的auth.php 配置以使用我们在第2 步中注册的服务提供者
'providers' => [
    'users' => [
        'driver' => 'custom-auth',
    ],
],
  1. 创建CustomAuthProvider 类本身并实现UserProvider interface
class CustomAuthProvider implements UserProvider
{
    public function retrieveById($identifier) {
        // Retrieve a user by their unique identifier.
    }

    public function retrieveByToken($identifier, $token) {
        // Retrieve a user by their unique identifier and "remember me" token.
    }

    public function updateRememberToken(Authenticatable $user, $token) {
        // Update the "remember me" token for the given user in storage.
    }

    public function retrieveByCredentials(array $credentials) {
        // Retrieve a user by the given credentials.
    }

    public function validateCredentials(Authenticatable $user, array $credentials) {
        // Validate a user against the given credentials.
    }
}

【讨论】:

猜你喜欢
  • 2023-03-27
  • 2022-01-21
  • 2017-04-18
  • 2017-10-12
  • 2013-08-30
  • 2015-02-26
  • 2021-11-16
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多