使用第三方认证的Laravel Auth

时间:2019-10-23 14:04:18

标签: laravel laravel-6

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

我现在要重定向到主页并执行“填充”操作。如果可以的话,我想尽可能地使用Laravel的本机/login

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

Auth

不足为奇,因为我没有使用Laravel的本机Auth方法,所以$foo = auth()->user()->foo->where('active', 1); 返回了auth()->user()。在数据库中创建/找到用户后,是否可以将其绑定到Laravel的null方法中?

谢谢您的任何建议!

编辑

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

编辑2

我将不断更新,因为我感到自己取得了任何进展,希望它不仅可以帮助我,而且可以帮助其他人更好地了解我要完成的工作。最终帮助可能会尝试这样做的其他人。

我已经这样更新了auth()

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

1 个答案:

答案 0 :(得分:1)

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

  1. 创建或编辑service provider 您可以通过运行
  2. 创建新的服务提供商

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.
    }
}