将用户登录详细信息存储到 Laravel 中的数据库
Store user login details to DB in Laravel
我在 Laravel 5.5 中使用 php artisan make:auth
等设置了身份验证,但现在我遇到了问题。
我有一个名为 user_actions
的数据库 table,我在其中存储用户在我的应用程序中执行的操作(例如他们打开了哪些页面,他们在搜索中使用了哪些过滤器,诸如此类)。我想向此 table 添加登录名,但我一辈子都想不通。
LoginController
只包含构造函数和redirectTo
变量。它有 use AuthenticatesUsers
,但在项目中搜索 AuthenticatesUsers
除了登录控制器文件中的两个提及之外没有任何结果。
AuthServiceProvider
只有注册策略的boot方法
在 Register
控制器中有 create
方法为用户创建数据库条目,但在 Login
中我不确定发生了什么。
那么,我可以在调用中的何处添加以将登录操作存储到数据库中?我必须监听事件吗?
向您的登录控制器添加一个经过身份验证的方法,此方法在身份验证过程后立即被调用
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
use AuthenticatesUsers;
/**
* @param Request $request
* @param Authenticatable $user
* @return \Illuminate\Http\RedirectResponse
*/
protected function authenticated(Request $request, Authenticatable $user)
{
/* Your db inserts */
return redirect()->intended($this->redirectTo);
}
}
如果您还想捕获登录尝试和/或失败的登录,您可以重写登录函数,因为只有在成功登录后才会调用 authenticated
您可以覆盖默认登录功能
use AuthenticatesAndRegistersUsers {
login as protected userLogin;
}
public function login(Request $request) {
//you db logic
return $this->userLogin();
}
您可以在 vendor\laravel\framework\src\Illuminate\Foundation\Auth
中找到所有登录逻辑
或者当你伤心时使用 event listener
<?php
namespace App\Listeners;
class UserEventSubscriber
{
/**
* Handle user login events.
*/
public function onUserLogin($event) {
//log data in db
}
/**
* Handle user logout events.
*/
public function onUserLogout($event) {
//log data in db
}
/**
* Register the listeners for the subscriber.
*
* @param Illuminate\Events\Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(
'Illuminate\Auth\Events\Login',
'App\Listeners\UserEventSubscriber@onUserLogin'
);
$events->listen(
'Illuminate\Auth\Events\Logout',
'App\Listeners\UserEventSubscriber@onUserLogout'
);
}
}
我在 Laravel 5.5 中使用 php artisan make:auth
等设置了身份验证,但现在我遇到了问题。
我有一个名为 user_actions
的数据库 table,我在其中存储用户在我的应用程序中执行的操作(例如他们打开了哪些页面,他们在搜索中使用了哪些过滤器,诸如此类)。我想向此 table 添加登录名,但我一辈子都想不通。
LoginController
只包含构造函数和redirectTo
变量。它有 use AuthenticatesUsers
,但在项目中搜索 AuthenticatesUsers
除了登录控制器文件中的两个提及之外没有任何结果。
AuthServiceProvider
只有注册策略的boot方法
在 Register
控制器中有 create
方法为用户创建数据库条目,但在 Login
中我不确定发生了什么。
那么,我可以在调用中的何处添加以将登录操作存储到数据库中?我必须监听事件吗?
向您的登录控制器添加一个经过身份验证的方法,此方法在身份验证过程后立即被调用
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
use AuthenticatesUsers;
/**
* @param Request $request
* @param Authenticatable $user
* @return \Illuminate\Http\RedirectResponse
*/
protected function authenticated(Request $request, Authenticatable $user)
{
/* Your db inserts */
return redirect()->intended($this->redirectTo);
}
}
如果您还想捕获登录尝试和/或失败的登录,您可以重写登录函数,因为只有在成功登录后才会调用 authenticated
您可以覆盖默认登录功能
use AuthenticatesAndRegistersUsers {
login as protected userLogin;
}
public function login(Request $request) {
//you db logic
return $this->userLogin();
}
您可以在 vendor\laravel\framework\src\Illuminate\Foundation\Auth
或者当你伤心时使用 event listener
<?php
namespace App\Listeners;
class UserEventSubscriber
{
/**
* Handle user login events.
*/
public function onUserLogin($event) {
//log data in db
}
/**
* Handle user logout events.
*/
public function onUserLogout($event) {
//log data in db
}
/**
* Register the listeners for the subscriber.
*
* @param Illuminate\Events\Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(
'Illuminate\Auth\Events\Login',
'App\Listeners\UserEventSubscriber@onUserLogin'
);
$events->listen(
'Illuminate\Auth\Events\Logout',
'App\Listeners\UserEventSubscriber@onUserLogout'
);
}
}