我有一个使用纯PHP编写的网站,现在正在学习Laravel,所以我重新制作这个网站来学习这个框架。我已经使用内置的Auth
Fasade来进行身份验证。我想要理解内部发生了什么,所以我决定通过自定义来学习更多内容。现在我尝试创建一个主密码,它将允许直接访问每个帐户(就像过去一样)。
不幸的是,我找不到任何帮助来完成这件事。当我在寻找类似问题时,我只找到了一些解决方案,例如通过管理员登录,然后切换到另一个帐户或旧版Laravel的解决方案等。
我开始自己研究Auth
结构,但是我迷失了,甚至找不到检查密码的地方。我还在GitHub上找到了非常详细的解决方案,所以我尝试一步步跟随它,但是我无法制作自己的更简短实现。在我的旧网站中,我只需要一行代码就可以创建主密码,但是在Laravel中却有很多代码,我没有办法修改它。
例如,我尝试改变所有包含hasher->check
部分的地方:
protected function validateCurrentPassword($attribute, $value, $parameters)
{
$auth = $this->container->make('auth');
$hasher = $this->container->make('hash');
$guard = $auth->guard(Arr::first($parameters));
if ($guard->guest()) {
return false;
}
return $hasher->check($value, $guard->user()->getAuthPassword());
}
对于
return ($hasher->check($value, $guard->user()->getAuthPassword()) || $hasher->check($value, 'myHashedMasterPasswordString'));
在
ValidatesAttributes
、DatabaseUserProvider
、EloquentUserProvider
和 DatabaseTokenRepository
中都有这个问题。但是,它没有起作用。我也一直在跟踪getAuthPassword()
代码的所有实例,寻找更多线索。我的其他解决方案是在某个地方放置像这样的代码:
if(Hash::check('myHashedMasterPasswordString',$given_password))
Auth::login($user);
但我找不到一个合适的地方来处理它,无论是在中间件、提供者还是控制器中。
我已经学习了一些身份验证(Auth
)功能,例如,我成功地更改了使用用户登录的电子邮件认证,但我想不出密码是如何工作的。有人能帮我解决我所遗漏的部分吗?如果需要更改哪些代码以及为什么要更改,我将不胜感激(如果这不是那么明显的话)。
我想一行一行地跟随代码执行,文件一步一步地看下去,也许我可以自己找到解决方法,但我感觉自己到处跳跃,没有任何思路,不知道这一切是如何相互关联的。