如何使用Google OAuth在Laravel中设置Remember Token


How do I set the Remember Token in Laravel with Google OAuth

标题几乎概括了这一点。在使用Google对用户进行身份验证时,我在使用Auth::attempt时遇到了问题。

我试着在我的User类上添加以下内容,但似乎不起作用。

public function getAuthPassword()
{
    return $this->some_field;
}

是否有手动设置记住令牌的方法?或者有没有办法告诉Laravel在另一个字段中查找密码?

我将尝试扩展Auth::();,我们拭目以待。

好吧,我想明白了。我做了几件事。

1.创建一个App/Extensions文件夹,并在该文件夹中创建一个新类

新型ExampleAuthProvider extends EloquentUserProvider

这里棘手的部分是筛选旧的问题和文档,以获得正确的类列表。这是我的单子。

use App'User;
use Illuminate'Support'Str;
use Illuminate'Contracts'Auth'UserProvider;
use Illuminate'Contracts'Hashing'Hasher as HasherContract;
use Illuminate'Contracts'Auth'Authenticatable as UserContract;
use Illuminate'Auth'EloquentUserProvider;

2.我重写了retrieveByCredentials()validateCredentials()

这里是retrieveByCredentials():

public function retrieveByCredentials(array $credentials)
{
    $query = $this->createModel()->newQuery();
    foreach ($credentials as $key => $value) {
        if (! Str::contains($key, 'value_to_replace_password')) {
            $query->where($key, $value);
        }
    }
    
    return $query->first();
}

validateCredentials():

public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['value_to_replace_password'];
    if ($plain != $user->getAuthPassword()) {
        return false;
    }
    return true;
}

现在,这只是功能性的,但我需要在这个新字段上实现哈希,如果您查看EloquentUserProvidervalidateCredentials()方法,您会发现它进行了哈希检查。

3.创建一个新的服务提供商

php artisan make:provider YourNewServiceProvider

在引导方法中,根据文档执行以下操作。

public function boot()
{
    Auth::extend('customAuth', function($app)
    {
        return new OAuthProvider(new User);
    });
}

一旦我将hash方法添加回,我还会将new Hasher传递给OauthProvider

请确保导入您的类。

use Illuminate'Contracts'Hashing'Hasher;
use App'User;
use 'Auth;
use App'Extensions'OAuthProvider;
use Illuminate'Support'ServiceProvider;

4.将您的服务提供商添加到config/app.php

App'Providers'CustomAuthProvider::class,

我可能应该在提供商名称中包含Service。

我想这就是一切。这是一次有趣的经历。此外,我将是第一个承认我是一个非常新的开发人员,也许我搞砸了什么。