Базовая фильтрация маршрута Laravel с несколькими параметрами

Поэтому я пытаюсь аутентифицировать моего пользователя с помощью пользовательских фильтров Laravel. У меня работает скрипт PHP LDAP, и я по сути подключил его к своему пользовательскому фильтру. Однако мне нужно передать этому сценарию имя пользователя и пароль, которые пользователь вводит на экране входа в систему; Другими словами, мне нужно передать свой пользовательский фильтр это имя пользователя и пароль из формы входа.

Вот мой код, чтобы помочь объяснить мою проблему:

routes.php

Route::group(array('before' => 'ldapTest'), function() {
Route::controller('apps', 'AppController', array(
//named routes here
));
});

filters.php

Route::filter('ldapTest', function()
{
$username = //how do I get this?
$password = //how do I get this?

//LDAP logic goes here; assume $ldapConn and $userDN are properly initialized
$userBind = @ldap_bind($ldapConn, $userDN, $password);

if($userBind)
{
Auth::login(//what goes here?  I want to access $username later on in applications);
return Redirect::to('apps/home');
}
else
{
echo 'Incorrect password';
}
});

Читая документацию, я понимаю, что вы можете передавать параметры в виде строк в фильтры следующим образом: Route::filter('ldapTest:400', function(), но я не понимаю, как я мог бы использовать это для передачи моего имени пользователя и пароля, используя то, что я предполагаю, будет Input :: get ().

Как я могу это сделать?

1

Решение

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

Route::filter('ldapTest', function($route, $request, $param){
//...
});

В вашем Closure третий аргумент получит параметр, который вы передали, и это $paramТаким образом, вы можете передать его в свой фильтр before:

array('before' => 'ldapTest:someString')

Итак, в фильтре $param будет содержать someString но в вашем случае это будет немного по-другому, я думаю, потому что вы хотите получать пользовательские входные данные, отправленные через форму, чтобы получить эти входные данные, вы можете использовать что-то подобное в обработчике вашего фильтра (Closure):

$username = $request->get('username'); // Assumed that username is a form field
$password = $request->get('password');

Также вы можете использовать Input::get('username') вместо $request если вы хотите, но это будет работать с $request переменная экземпляра, и я бы предпочел это использовать.

0

Другие решения

У меня была похожая потребность в моем проекте, решенная с помощью этого (не очень элегантного, но работающего) обходного пути:

Route::filter('multiParamFilter', function($route, $request, $params){
list($p1, $p2) = explode(':', $params);
//Now you have $p1 and $p2 initialized with parameters
....
}

В rout.php вы можете позвонить:

Route::get('path', array('before' => 'multiParamFilter:p1:p2' ......

Примечание: требуется, чтобы вы не использовали ‘:’ (или хотя бы другой символ) в значениях вашего параметра

0