将用户登录详细信息存储到 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'
        );
    }

}