Запретить уже зарегистрированному пользователю войти на другой компьютер - PullRequest
0 голосов
/ 28 ноября 2018

Поэтому я пытаюсь предотвратить вход уже вошедшего в систему пользователя в другом браузере или на другом компьютере.Я думаю, что мне нужно добавить ограничение IP-адреса, но я не уверен, как это будет работать.

Вот мой create_users_table.php файл миграции

Schema::create('users', function (Blueprint $table) {
     $table->increments('id');
     $table->string('name');
     $table->string('username')->unique();
     $table->string('email')->unique();
     $table->string('password');
     $table->timestamp('last_login');
     $table->boolean('isActive')->default(true);
     $table->rememberToken();
     $table->timestamps();
});

Я также думаю, что мне нужно создать ограничение внутри RedirectIfAuthenticated Промежуточного класса.

Итак, вот мой RedirectIfAuthenticated.php класс

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
         return redirect('/');
    }

    return $next($request);
}

Какое оптимальное решение для этого и не позволяет уже зарегистрированному пользователю войти в системус другого компьютера?Заранее спасибо !!!

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Из Laravel 5.6 вам не нужно создавать таблицы базы данных или подобные вещи.

в 'LoginController.php'

app / Http / Controllers / Auth / LoginController.php

добавить это,

protected function authenticated()
{
    \Auth::logoutOtherDevices(request('password'));
}

Затем из ядра,

app / Http / Kernel.php

в защищенных $ middlewareGroups разделах, удалите комментарий из этой строки, если он уже существует, или просто добавьте эту строку -

\Illuminate\Session\Middleware\AuthenticateSession::class,

Вот и все, теперь, если уже залогиненный пользователь пытается войти в системуснова, тогда предыдущий вошедший в систему сеанс будет уничтожен, а предыдущий вошедший в систему пользователь автоматически выйдет из системы.

Это должно сработать для вас.

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

Решением было установить значение сеанса, когда пользователь входит в систему. Затем у меня был небольшой класс, проверяющий, совпадает ли сохраненный идентификатор сеанса с текущим пользователем, вошедшим в систему.

Если пользовательвход в систему откуда-то еще, идентификатор сеанса в БД обновится, и «старый» пользователь выйдет из системы.

Я не изменял драйвер Auth или что-то еще, просто поместил его сверху, когда пользователь входит в системув. Ниже происходит, когда вход в систему успешен:

$user->last_session = session_id();
$user->save();

Чтобы проверить, является ли сеанс действительным, я использовал ниже

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
      if(session_id() != Auth::user()->last_session){
        Auth::logout();
        return redirect('login');
      }

     return redirect('/');

    }

    return $next($request);
}

Ссылка Это Ссылка .

...