在 laravel 中登录时更新数据库
Posted
技术标签:
【中文标题】在 laravel 中登录时更新数据库【英文标题】:update database on login in laravel 【发布时间】:2017-06-05 09:06:36 【问题描述】:我在数据库中有一个user
列,其中有viewed_at
列,类型为date
。
我想在每次用户登录时更新该字段。 我希望在每次用户登录时运行代码 --
$user = User::find(Auth::user()->id);
$user->viewed_at = /* current date */;
$user->save();
请帮我解决这个问题。 请不要建议我在经过身份验证的人被重定向到的控制器中执行此操作。
【问题讨论】:
也许像$user->viewed_at = 'NOW()';
这样简单
您应该在您的身份验证控制器中执行此操作。有什么问题?
【参考方案1】:
Auth
类提供a handful of useful events。其中之一是Login
。
Listen to this event 并在触发时更新$user->viewed_at
。
【讨论】:
【参考方案2】:在 5.3 中,您可以覆盖 Auth\LoginController.php
中的 authenticated()
方法并将逻辑放在那里。此外,由于 Laravel 总是获取经过身份验证的用户的实例,因此您可以使用 auth()->user()
对象保存一个查询。
use Carbon\Carbon;
....
protected function authenticated()
$user = auth()->user();
$user->viewed_at = Carbon::now();
$user->save();
【讨论】:
在Auth\LoginController.php
中使用authenticated()
方法干扰默认登录功能?
@Advaith 没有。 login()
调用 sendLoginResponse()
然后调用 authenticated()
就您将始终通过默认的\Auth\LoginController
方法进行身份验证而言,这应该是一个足够的解决方案。【参考方案3】:
试试:
$user->viewed_at = date('Y-m-d H:i:s');
【讨论】:
以上是关于在 laravel 中登录时更新数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用“logoutOtherDevices”时,Laravel 新密码不会保存到数据库中
如何在 Laravel 中将每个用户的数据库字段更新限制为 24 小时一次
在Laravel中,当我直接用数据库更新内容时,我怎样才能保持搜索索引有正确的数据更新?