Laravel 5.5: последний логин и последний логин IP не должны обновляться при успешном входе - PullRequest
0 голосов
/ 26 ноября 2018

Я использую laravel 5.5, хочу записывать последний логин (дату и время) и последний логин на каждом успешном входе в систему. Но он не обновляется.

LoginController:

<?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',
];

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Вы импортировали углеродный пакет?

В любом случае, для реализации этого, я думаю, https://laravel.com/docs/5.7/events - это элегантный способ.

Внутри приложения \ Providers \ EventServiceProvider.php напишите код ниже

   protected $listen = [

      'Illuminate\Auth\Events\Login' => [
        'App\Listeners\LogSuccessfulLogin',
       ],
 ];

Создание приложения Listener Inside \ 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.

0 голосов
/ 20 февраля 2019

Если вы хотите записать последнее посещение пользователя, сначала выполните эту команду

php artisan make:middleware LastVisit

Затем добавьте эту строку в конец массива middlewareGroups (App \ Http \ Kernel.php)

\App\Http\Middleware\LastVisit::class,

Наконец, измените ваше промежуточное ПО LastVisit.(Я предполагаю, что у вас есть столбец 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);
    }
}

Это работает с токеном "Помни меня" и логинами в социальных сетях.

0 голосов
/ 26 ноября 2018

Запись информации о последнем входе в систему полезна, и вы можете легко сохранять и обновлять время последнего входа в систему и IP-адрес клиента.

Вы можете достичь этого несколькими способами, но я покажу вам очень простой и эффективныйТехника, просто добавьте показанный ниже метод в логин контроллера

function authenticated(Request $request, $user)
    {
        $user->last_login = Carbon::now()->toDateTimeString();
        $user->last_login_ip = $request->getClientIp();
        $user->save();
    }
...