标题几乎总结了它。在使用Google验证用户身份时,我在使用Auth::attempt
时遇到问题。
我尝试将以下内容放在我的User类上,但它似乎无法正常工作。
public function getAuthPassword()
{
return $this->some_field;
}
有没有办法手动设置记忆令牌?或者有没有办法告诉Laravel查看密码的其他字段?
我将尝试延长Auth::();
我们将会看到这种情况。
答案 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。
我认为这就是一切。这是一次有趣的经历。另外,我会第一个承认我是一个非常新的开发人员,也许我搞砸了。