>当使用 Laravel 框架的时候,你会发现这是一个神奇的框架,它所带来的便捷性,扩展性等是让人着迷的。今天记录一下本人使用 Laravel 中用到的功能,登陆日志记录。 ### 前言 当我们运行一个 `Laravel` 项目的时候,你发现登陆注册等等操作都不需要你去处理,因为 `Laravel` 已经为你准备好了,那么我这里想要实现登陆日志的操作,该如何操作呢? ### 查看登陆逻辑 当时博主看了看文档和代码,就开始修改了源码: 当我看到 `app/Http/Controllers/Auth/LoginController.php` 文件时,发现有这么一个 `use AuthenticatesUsers;` 点开查看,发现有用户登陆成功和失败的方法。 验证通过的方法: /** * The user has been authenticated. * * @param \Illuminate\Http\Request $request * @param mixed $user * @return mixed */ protected function authenticated(Request $request, $user) { // } 验证失败的方法: /** * Get the failed login response instance. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ protected function sendFailedLoginResponse(Request $request) { return redirect()->back() ->withInput($request->only($this->username(), 'remember')) ->withErrors([ $this->username() => Lang::get('auth.failed'), ]); } 所以在对应的方法里面添加日志写入代码,重新登陆,查看数据库,发现成功。 实时证明这样做是可以的,但是当我们使用 `composer update` 更新了项目后,你会发现日志记录功能失效了,这是为什么呢?因为 `composer update` 更新后,也会更新你的 `Laravel/vendor` 文件夹,所以你写的东西失效了^ ^... 那么正确的方法是什么呢?请看下面讲解: ### 重写父类方法 因为我们在看到在 `app/Http/Controllers/Auth/LoginController.php`中 `use AuthenticatesUsers;` ,所以可以重新实现父类的方法: /** * 重写AuthenticatesUsers 的验证通过方法,添加日志 */ public function authenticated(Request $request) { \App\Models\Log::create(array( 'user_id' => $request->user()->id, 'email' => $request->email, 'type' => 'login', 'content' => 'success', 'ip' => $request->getClientIp(), 'useragent' => $request->server->get('HTTP_USER_AGENT'), )); } /** * 重写AuthenticatesUsers 的验证失败方法,添加日志 */ public function sendFailedLoginResponse(Request $request) { \App\Models\Log::create(array( 'user_id' => 0, 'email' => $request->email, 'type' => 'login', 'content' => 'fail', 'ip' => $request->getClientIp(), 'useragent' => $request->server->get('HTTP_USER_AGENT'), )); return redirect()->back()->withInput($request->only($this->username(), 'remember'))->withErrors([$this->username() => Lang::get('auth.failed')]); } 再次测试,成功。