Ent*_*ner 0 php laravel laravel-5.5 laravel-authentication
我正在使用 laravel 5.5,想在每次成功登录时记录上次登录(日期时间)和上次登录 IP。但它没有更新。
登录控制器:
<?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()
]);
}
}
Run Code Online (Sandbox Code Playgroud)
用户模型:
protected $fillable = [
'first_name','last_name', 'email', 'password','phone','user_type','last_login_at',
'last_login_ip',
];
Run Code Online (Sandbox Code Playgroud)
你是进口的碳包吗?
无论如何要实现这一点,我认为https://laravel.com/docs/5.7/events是一种优雅的方式。
在 app\Providers\EventServiceProvider.php 里面写下面的代码
protected $listen = [
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
];
Run Code Online (Sandbox Code Playgroud)
在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
只需根据需要更新 handle() 即可。在此处导入 carbon 包并更新 last_login_at。
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |