Загрузочный laravel из общедоступной подпапки

У меня есть Laravel v5.5, работающий на apache, и мне нужно реализовать проверку пользователей с помощью сертификатов смарт-карт (с использованием apache SSLVerifyClient require).

Это означает, что мне нужна общая папка, которая будет запрашивать сертификат клиента, и моя структура общих папок следующая:

/public/
 |- index.php <-- laravel main bootstrap
 |- login/
    |- .htaccess <-- let's apache to ask for client cert only on this folder
    |- index.php <-- secondary bootstrap, that should work as main bootstrap

Как я могу загрузить laravel из подпапки (public / login / index.php) , чтобы он сохранил пути и маршрутизацию, как в основной загрузке < / strong> (public / index.php) ?

Я пробовал делать

<?php
require_once '../index.php';

и

<?php
// copy-paste the content from ../index.php and change the paths

define('LARAVEL_START', microtime(true));
require __DIR__.'/../../vendor/autoload.php';
$app = require_once __DIR__.'/../../bootstrap/app.php';

// ...

Но оба они обрабатывают маршруты так, как будто "/ login" является домашним корнем "/".


person Siffer    schedule 24.10.2017    source источник
comment
Боже мой ... / логин должен идти в /resources/views/, а не в общую папку   -  person Option    schedule 24.10.2017
comment
нет-нет, / login ничего не выводит. Это просто каталог, который будет использоваться для вызова правила apache SSLVerifyClient = require. Затем сертификат клиента, полученный при проверке, будет использоваться для входа клиента в систему, для чего мне нужен загрузочный laravel.   -  person Siffer    schedule 24.10.2017
comment
вы пробовали public_path()/login/index.php?   -  person Option    schedule 24.10.2017
comment
Не могли бы вы объяснить это поподробнее? Afaik, public_path () - это вспомогательный метод laravel, и я не могу получить к нему доступ, если laravel не загружен (инициирован)   -  person Siffer    schedule 24.10.2017


Ответы (1)


Это то, что у меня есть сейчас как рабочее решение. Поскольку единственной целью для отдельного пути / входа в систему был сбор информации о сертификате из $ _SERVER, а затем передача ее соответствующему контроллеру laravel, мне нужен был только загрузочный laravel, чтобы получить доступ к правильному экземпляру сеанса.

// -- file login/index.php

// bootstrap laravel
require __DIR__.'/../../vendor/autoload.php';
$app = require_once __DIR__.'/../../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$request = Illuminate\Http\Request::capture();

// trigger all the middlewares (including SessionStart)
$response = $kernel->handle($request);

// check client verification and store certificate information to session
$request->session()->put([
    'login-card-cert' => $request->server('SSL_CLIENT_CERT'),
    'login-card-user' => $request->server('SSL_CLIENT_S_DN'),
]);
$request->session()->save();

// use away() to send user out of the sub-folder and back to main laravel route
$response = redirect()->away('/do-login/');

// finish up with request (laravel termination)
$response->send();
$kernel->terminate($request, $response);
person Siffer    schedule 25.10.2017