在 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 更新在登录功能中不起作用

在Laravel中,当我直接用数据库更新内容时,我怎样才能保持搜索索引有正确的数据更新?

Laravel - 使用大数据优化更新/插入查询的最佳方法是啥?

Laravel 数据库通知仅更新计数