我使用php artisan make:auth
等在Laravel 5.5中设置了身份验证,但现在我遇到了问题。
我有一个名为user_actions
的数据库表,我存储了用户在我的应用程序中执行的操作(例如他们打开了哪些页面,他们在搜索时使用了哪些过滤器,这样的东西)。我想在这个表中添加登录,但我不能为我的生活找出方法。
LoginController
仅包含构造函数和redirectTo
变量。它有use AuthenticatesUsers
但是在AuthenticatesUsers
项目中搜索除了登录控制器文件中的两个提及之外没有任何结果。
AuthServiceProvider
只有注册策略的启动方法。
在Register
控制器中有create
方法为用户创建数据库条目,但在Login
中我不确定发生了什么。
那么在哪里可以添加我的调用来将登录操作存储到数据库中?我必须听一个活动吗?
答案 0 :(得分:2)
向登录控制器添加经过身份验证的方法,此方法在身份验证过程后立即调用
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);
}
}
如果您还想捕获登录尝试和/或登录失败,您可以覆盖登录功能,因为只有在成功登录后才会调用已验证的
答案 1 :(得分:1)
您可以覆盖默认登录功能
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'
);
}
}