چگونه زمان آخرین لاگین و IP یوزر را ذخیره کنیم؟

احراز هویت یا همان Auth در لاراول به صورت پیش فرض شامل جدول User و مدل آن می شود، بدون آنکه log کاربر را ذخیره کند. بنابراین لازمه که ما خودمون آنرا اجرا کنیم. خوشبختانه، خیلی هم ساده ست. در زیر روند آن را خواهیم دید.

خب ما می خواهیم آخرین زمان لاگین کاربر و آدرس IP آن را در همان جدول User ذخیره کنیم.

بنابراین با ساخت یک migration کار رو شروع می کنیم:

php artisan make:migration add_login_fields_to_users_table

سپس آن را با ساخت فیلدهای زیر تکمیل می کنیم:

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();
        });
    }
 
    // ...

بعد از آن، نیاز داریم که این فیلد ها رد مدل app/User.php پر شونده یا fillable کنیم:

class User extends Authenticatable
{
    protected $fillable = [
        'email',
        'password',
        'name',
        'last_login_at',
        'last_login_ip',
    ];
 
    // ...

در نهایت، وقت پر کردن آنهاست. نیاز هست که بدونید در فایل trait به نام AuthenticatesUsers یک متود به نام authenticated() وجود دارد که با هر بار لاگین کردن یک یوزر، فراخوانی می شود.

/**
 * The user has been authenticated.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function authenticated(Request $request, $user)
{
    //
}

در این trait این متود خالی است. یعنی ما آزاد هستیم که آنرا در کلاس LoginController بازنویسی کنیم و هر کدی که دلمان بخواهد به آن اضافه کنیم.

app/Http/Controllers/Auth/LoginController.php:

function authenticated(Request $request, $user)
{
    $user->update([
        'last_login_at' => Carbon::now()->toDateTimeString(),
        'last_login_ip' => $request->getClientIp()
    ]);
}

و تمام! آنچه در جدول users خواهیم داشت به شکل زیر خواهد بود:


کامنت ها (0)

ارسال نظر