<?php
1. How to Save User’s Last Login Time and IP Address // 1
Quick tip of the day. Default Laravel Auth comes with User table and model,
but without logging capability, so we need to build it ourselves. Fortunately,
it’s very easy, I will show you one method.
Let’s say that we want to save user’s last login time and IP address in the same users table.
So we start with database migration:
## /* php artisan make:migration add_login_fields_to_users_table*/##
Then we fill it with these fields:
class AddLoginFieldsToUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->datetime('last_login_at')->nullable();
$table->string('last_login_ip')->nullable();
});
}
// ...
?>
Next, we need to add these fields as fillables in app/User.php model:
Next, we need to add these fields as fillables in app/User.php model:
<?php
class User extends Authenticatable
{
protected $fillable = [
'email',
'password',
'name',
'last_login_at',
'last_login_ip',
];
// ...
Finally, how do we fill them in? You need to know that there is authenticated() method
in the AuthenticatesUsers trait. It’s called every time someone logs in.
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
//
}
In trait this method is empty. So we have freedom to override it in LoginController
and add whatever code we need.
app/Http/Controllers/Auth/LoginController.php:
function authenticated(Request $request, $user)
{
$user->update([
'last_login_at' => Carbon::now()->toDateTimeString(),
'last_login_ip' => $request->getClientIp()
]);
}
And, that’s it! Here’s what we have in users table after log in:
?>
0 comments:
Post a Comment
Thanks