如何使用Google OAuth设置Laravel中的记住令牌

时间:2015-09-25 14:31:29

标签: php laravel authentication google-oauth

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

我尝试将以下内容放在我的User类上,但它似乎无法正常工作。

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

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

我将尝试延长Auth::();我们将会看到这种情况。

1 个答案:

答案 0 :(得分: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;
}

现在,这只是功能性的,但我需要在这个新字段上实现散列,如果你查看EloquentUserProvider的{​​{1}}方法,你会发现它有一个哈希检查。

第3。创建新的服务提供商。

validateCredentials()

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

php artisan make:provider YourNewServiceProvider

一旦我重新添加哈希方法,我也会将public function boot() { Auth::extend('customAuth', function($app) { return new OAuthProvider(new User); }); } 传递给new Hasher

确保导入您的课程。

OauthProvider

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

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

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

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