Laravel автоматически отключает пользователей после определенного интервала? - PullRequest
0 голосов
/ 25 февраля 2020

Я новичок в Laravel и использую Laravel 6. Я работаю над приложением, которое использует аутентификацию по умолчанию для Laravel. Я зарегистрировался три раза с тремя разными адресами электронной почты для тестирования. Я обнаружил, что через несколько часов я вышел из системы и должен снова войти в систему, даже если я не нажимал на кнопку выхода из системы.

Правильно ли я полагаю, что для идентификаторов в Laravel установлено какое-то время по умолчанию Если да, то как изменить интервал или вообще отключить его?

Если это не проблема, что может быть причиной того, что я вышел из системы?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Laravel аутентификация использует session драйвер для web защиты по умолчанию. Вы можете проверить драйвер веб-охраны по умолчанию на config/auth.php.

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    //...
],

Время жизни Laravel сеанса по умолчанию составляет 120 минут. Вы также можете проверить это значение по умолчанию на config/session.php как lifetime свойство.

'lifetime' => env('SESSION_LIFETIME', 120),

Таким образом, вы автоматически выйдете из системы (т. Е. Истечет ваш сеанс) через 2 часа по умолчанию.

Если вы хотите остаться, войдите в систему в течение длительного времени у вас есть 2 варианта:

  1. Выберите опцию «запомнить меня» при входе в приложение (рекомендуется).
  2. Установите большое значение (например, 10 лет или итак) для времени жизни сессии в локальном файле .env. Это не рекомендуется в производственной среде, потому что не только аутентифицированные пользователи, но и все посетители (включая guest, bots et c.) Будут иметь длительный сеанс.
    SESSION_LIFETIME=5256000 // 10 years
    
0 голосов
/ 26 февраля 2020

Если вы отметите CookieSessionHandler :: write и CookieSessionHandler :: read :

// write

/**
 * {@inheritdoc}
 */
public function write($sessionId, $data)
{
    $this->cookie->queue($sessionId, json_encode([
        'data' => $data,
        'expires' => $this->availableAt($this->minutes * 60),
    ]), $this->minutes);

    return true;
}

// read

/**
 * {@inheritdoc}
 */
public function read($sessionId)
{
    $value = $this->request->cookies->get($sessionId) ?: '';

    if (! is_null($decoded = json_decode($value, true)) && is_array($decoded)) {
        if (isset($decoded['expires']) && $this->currentTime() <= $decoded['expires']) {
            return $decoded['data'];
        }
    }

    return '';
}

вы можете видеть, что должно быть какое-то значение времени для сравнения с текущим значением времени. В противном случае возвращается пустая строка и сессия становится недействительной. Лучший способ сделать это - установить значение конфигурации на очень большое значение (например, 35791394 [~ 68 лет в минутах]). Это отказоустойчиво для 32-разрядных систем, поскольку оно равно 2147483640, что меньше 32-разрядного значения со знаком. Значение MAX_INT 2147483647, на всякий случай. Даже если иногда в будущем Laravel переписать время жизни сеанса, чтобы использовать секунды вместо минут, это будет длиться более года.

Другой ответ SO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...