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

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

标题几乎概括了它。使用 Google.

验证用户时,我在使用 Auth::attempt 时遇到问题

我尝试将以下内容添加到我的用户 class,但它似乎没有用。

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

有没有办法手动设置记住令牌?或者有没有办法告诉 Laravel 查看密码的不同字段?

我将尝试延长Auth::();我们将看看结果如何。

好的,我明白了。我做了一些事情。

1.创建一个 App/Extensions 文件夹并在该文件夹中创建一个新的 class。

新classExampleAuthProvider extends EloquentUserProvider

这里棘手的部分是筛选较旧的问题和文档以获得要使用的 classes 的正确列表。这是我的清单。

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

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

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

php artisan make:provider YourNewServiceProvider

在boot方法中,根据documentation.

进行如下操作
public function boot()
{
    Auth::extend('customAuth', function($app)
    {
        return new OAuthProvider(new User);
    });
}

一旦我重新添加散列方法,我也会将 new Hasher 传递给 OauthProvider

确保导入您的 classes。

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,

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

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