laravel自带登录验证代码跟踪
laravel自带登录验证代码跟踪
网上下载了一套lavalite的CMS系统,账户登录是laravel系统自带的验证模块,跟踪了下代码,记录下流程:
NO1:从页面提交登录数据开始,账户使用的是email字段,密码使用的是password,数据提交到后端的路由,路由也找的费劲:
\Illuminate\Routing\auth内的 $this->post('login', 'Auth\LoginController@login');
NO2:进入Auth下的控制器LoginController,是木有login方法的,然后使用了php的trait方法(参见php的trait使用方法),调用的是AuthenticatesUsers.php内的login()方法,再调用其 attemptLogin()方法,该方法内的$this->guard()->attempt()将账户密码及记住密码状态等参数传到 Illuminate\Auth\SessionGuard.php内的attempt()方法
NO3:attempt()内的关键代码
$this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);
retrieveByCredentials方法为Illuminate\Auth\EloquentUserProvider.php内,传入参数账户密码后根据传入的账户获取账户的信息并返回
$this->hasValidCredentials($user, $credentials)
hasValidCredentials方法将调用Illuminate\Auth\EloquentUserProvider.php内的方法validateCredentials(),在这个方法内,laravel通过hash faced提供的bcrypt()加密方式将传入的密码与数据库存储密码对比,返回true OR false
NO4:validateCredentials()方法内可以更改加密方式,如md5(),可以自行操作