Поделитесь аутентификацией / сеансом Laravel с PHP

Я пытаюсь использовать аутентификацию Laravels с помощью ряда простых приложений HTML / Javascript.

То, как я думаю, идеально подойдет:

  1. Пользователь посещает простое приложение HTML
  2. Простое приложение HTML содержит файл PHP, который проверяет подлинность пользователя. Если это не так, пользователь отправляется в приложение Laravel для входа в систему, если пользователь зарегистрирован, он может просто использовать приложение.
  3. Пользователь регистрируется через Laravel и перенаправляется обратно в приложение HTML, где этот процесс начнется снова.

Проблема, которую я имею, – проверить, зарегистрирован ли пользователь в скрипте PHP. Сессия Laravels там недоступна (и делиться ею через session_start() и $_SESSION["auth"] = true добавит только переменную в версию Laravels собственной PHP-сессии).

Это настройки, которые у меня есть в app/config/session.php

 return array( 'driver' => 'native', 'lifetime' => 120, 'files' => storage_path().'/sessions', 'connection' => null, 'table' => 'sessions', 'lottery' => array(2, 100), 'cookie' => 'laravel_session', 'path' => null, 'domain' => null, ); 

Я изменил путь на null потому что хочу использовать сеанс во всем домене.

Мой включенный PHP-скрипт очень прост и выглядит следующим образом:

 session_start(); if($_SESSION['authenticated']){ echo "logged_in"; } else { header("Location: laravel/login/url"); } 

Вы можете задаться вопросом, почему я не просто включаю приложение в структуру Laravels, это потому, что существует около 100 различных версий этого простого приложения HTML, разбросано по 10 доменным именам, на данный момент у каждого доменного имени есть свои (очень старые и небезопасные) скрипт входа (который копируется каждый раз, когда создается новый домен). Поэтому я хочу централизовать это с помощью одной базы данных и одной системы управления, использующей Laravel.

Надеюсь, кто-то здесь знает, как исправить эту проблему или обойти ее (возможно, я должен попытаться использовать пакет сеанса Laravels в моем PHP-скрипте?).

Laravel использует драйверы хранения для управления сеансом – это означает, что попытка доступа к содержимому через переменную PHP $ _SESSION никогда не будет работать. Ваша конфигурация устанавливает драйвер сеанса по умолчанию для «родного», который (я думаю), является файловым сеансовым драйвером, то есть все данные сеанса хранятся в приложении / хранилище / сеансах (я считаю, что он хранит данные сеанса в некоторой структуре JSON). Здесь вы можете узнать больше о драйверах сеанса.

Поэтому, чтобы ответить на ваш вопрос, есть несколько способов, которые приходят на ум, чтобы решить эту проблему. То, что я, вероятно, сделаю, это реализовать простой пользовательский интерфейс сеанса, который просто проверяет, вошел ли пользователь в систему. Вы можете настроить сеанс пользователя во время входа в систему, когда вы аутентифицируете пользователя через вашу форму laravel. Например:

 if (Auth::attempt(array('email' => $email, 'password' => $password))) { // Set your user's session to logged in here. You will have to implement some // system to do so, the below code is INSECURE/NOT USEABLE $_SESSION['user'] = $email; } 

И тогда вы сделаете обратное, когда пользователь выйдет из системы. Как упоминалось выше, просто установка сеанса пользователя для входа в систему очень небезопасна по множеству причин, наиболее вопиющим является захват сеанса. ( Это отличное чтение по этому вопросу). Если вы можете реализовать безопасную систему управления сеансом (и, действительно, это не должно быть сложно и будет легким), то я думаю, что эта стратегия – ваш лучший выбор.

Альтернативой является попытка использовать куки в качестве драйвера сеанса, но при этом будет добавлено больше уровней сложности и мусора, так как вам сначала нужно будет получить идентификатор сеанса Laravel из одного файла cookie и использовать его для чтения другого … не изящное решение ,

Поэтому я бы рекомендовал использовать первый метод, о котором я говорил, и внедрить простую и безопасную систему управления сеансом. Надеюсь, это помогло!

Другое решение: используя следующий код, вы можете загрузиться в Laravel, используя настоящий сеанс Laravel, поэтому вы можете фактически использовать Auth :: check () для авторизации, и вам даже не нужно использовать родную $ _SESSION.

См. https://gist.github.com/frzsombor/ddd0e11f93885060ef35.