Laravel 5.5:上次登录和上次登录 IP 不会在成功登录时更新
Laravel 5.5 : Last Login and Last Login IP are not to be updating on successful login
我正在使用 laravel 5.5,想在每次成功时记录上次登录(日期时间)和上次登录 IP login.but 它没有更新。
登录控制器:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected function authenticated(Request $request, $user)
{
$user->update([
'last_login_at' => Carbon::now()->toDateTimeString(),
'last_login_ip' => $request->getClientIp()
]);
}
}
用户模型:
protected $fillable = [
'first_name','last_name', 'email', 'password','phone','user_type','last_login_at',
'last_login_ip',
];
记录上次登录信息很有用,您可以轻松保存和更新上次登录时间和客户端IP地址。
您可以通过多种方式实现这一点,但我将向您展示非常简单有效的技术,只需将下面显示的方法添加到登录控制器
function authenticated(Request $request, $user)
{
$user->last_login = Carbon::now()->toDateTimeString();
$user->last_login_ip = $request->getClientIp();
$user->save();
}
你有导入碳包吗?
无论如何,我认为 https://laravel.com/docs/5.7/events 是一种优雅的实现方式。
里面app\Providers\EventServiceProvider.php写下面代码
protected $listen = [
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
];
在 app\Listeners\LogSuccessfulLogin.php
中创建一个监听器
namespace App\Listeners;
use Illuminate\Auth\Events\Login;
class LogSuccessfulLogin {
/**
* Create the event listener.
*
* @return void
*/
public function __construct(){
}
/**
* Handle the event.
*
* @param Login $event
* @throws \Exception
*/
public function handle(Login $event){
$user = $event->user;
$user->last_login_ip = request()->getClientIp();
$user->save();
}
}
只需根据需要更新 handle() 即可。在此处导入碳包并更新 last_login_at.
如果要记录用户最后一次访问,首先运行这个命令
php artisan make:middleware LastVisit
然后将这一行添加到middlewareGroups数组的末尾(App\Http\Kernel.php)
\App\Http\Middleware\LastVisit::class,
最后更改您的 LastVisit 中间件。 (我假设您的用户 table 中有一个 last_visit 列)
<?php
namespace App\Http\Middleware;
use Carbon\Carbon;
use Closure;
use Illuminate\Support\Facades\Auth;
class LastVisit
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return $next($request);
}
$user = Auth::User();
$user->timestamps = false;
$user->last_visit = Carbon::now()->toDateTimeString();
$user->save();
return $next($request);
}
}
这也适用于记住我令牌和社交登录。
我正在使用 laravel 5.5,想在每次成功时记录上次登录(日期时间)和上次登录 IP login.but 它没有更新。
登录控制器:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected function authenticated(Request $request, $user)
{
$user->update([
'last_login_at' => Carbon::now()->toDateTimeString(),
'last_login_ip' => $request->getClientIp()
]);
}
}
用户模型:
protected $fillable = [
'first_name','last_name', 'email', 'password','phone','user_type','last_login_at',
'last_login_ip',
];
记录上次登录信息很有用,您可以轻松保存和更新上次登录时间和客户端IP地址。
您可以通过多种方式实现这一点,但我将向您展示非常简单有效的技术,只需将下面显示的方法添加到登录控制器
function authenticated(Request $request, $user)
{
$user->last_login = Carbon::now()->toDateTimeString();
$user->last_login_ip = $request->getClientIp();
$user->save();
}
你有导入碳包吗?
无论如何,我认为 https://laravel.com/docs/5.7/events 是一种优雅的实现方式。
里面app\Providers\EventServiceProvider.php写下面代码
protected $listen = [
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
];
在 app\Listeners\LogSuccessfulLogin.php
中创建一个监听器namespace App\Listeners;
use Illuminate\Auth\Events\Login;
class LogSuccessfulLogin {
/**
* Create the event listener.
*
* @return void
*/
public function __construct(){
}
/**
* Handle the event.
*
* @param Login $event
* @throws \Exception
*/
public function handle(Login $event){
$user = $event->user;
$user->last_login_ip = request()->getClientIp();
$user->save();
}
}
只需根据需要更新 handle() 即可。在此处导入碳包并更新 last_login_at.
如果要记录用户最后一次访问,首先运行这个命令
php artisan make:middleware LastVisit
然后将这一行添加到middlewareGroups数组的末尾(App\Http\Kernel.php)
\App\Http\Middleware\LastVisit::class,
最后更改您的 LastVisit 中间件。 (我假设您的用户 table 中有一个 last_visit 列)
<?php
namespace App\Http\Middleware;
use Carbon\Carbon;
use Closure;
use Illuminate\Support\Facades\Auth;
class LastVisit
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return $next($request);
}
$user = Auth::User();
$user->timestamps = false;
$user->last_visit = Carbon::now()->toDateTimeString();
$user->save();
return $next($request);
}
}
这也适用于记住我令牌和社交登录。