【问题标题】:How do I set the Remember Token in Laravel with Google OAuth如何使用 Google OAuth 在 Laravel 中设置记住令牌
【发布时间】:2015-09-25 14:31:29
【问题描述】:

标题几乎概括了它。在向 Google 验证用户身份时,我在使用 Auth::attempt 时遇到了问题。

我尝试将以下内容放在我的 User 类中,但它似乎不起作用。

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

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

我将尝试扩展Auth::(); 我们会看看结果如何。

【问题讨论】:

    标签: php laravel authentication google-oauth


    【解决方案1】:

    好吧,我想通了。我做了一些事情。

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

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

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

    php artisan make:provider YourNewServiceProvider

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

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

    重新添加哈希方法后,我还将将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。

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

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2020-12-24
      • 1970-01-01
      • 2019-10-19
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      相关资源
      最近更新 更多