Как добавить дополнительные условия в запрос аутентификации в Laravel, используя HTTP Basic аутентификацию?

У меня есть маршрут:

Route::get('/', array('before' => 'auth.basic', function() {
return Response::json(
array(
'name' => 'John Smith',
'age' => 42
)
);
}));

Я хочу добавить where active= 1 на запрос аутентификации.

Я знаю, что могу добавить дополнительные условия Auth::attempt() но я не знаю, как это сделать, используя Auth::basic(),

1

Решение

Есть два способа сделать это.

1. Измените фильтр и используйте Auth :: попытки ()

Это простой способ. Направляйтесь к app/filter.php и изменить auth.basic вход в это

Route::filter('auth.basic', function()
{
if(Auth::check()) return; // already logged in

if(Auth::attempt(array(
'email' => Request::getUser(),
'password' => Request::getPassword(),
'active' => 1))){
return;
}

$headers = array('WWW-Authenticate' => 'Basic');
return Response::make('Invalid credentials.', 401, $headers);
});

Это в основном то, что делает класс Laravel Guard, когда Auth::basic() вызывается (за исключением «активной» части, очевидно)

2. Продлить аутентификацию

Теперь это «более элегантный» способ сделать это. Хотя я не знаю, действительно ли это того стоит в вашем случае. Я также не собираюсь описывать это в каждой детали.

Для расширения Laravel Auth вы можете использовать Auth::extend(), Вот пример:

Auth::extend('my_driver', function() {
$model = Config::get('auth.model');
$provider = new Illuminate\Auth\EloquentUserProvider(App::make('hash'), $model);
return new MyGuard($provider, App::make('session.store'));
});

MyGuard класс будет расширяться Illuminate\Auth\Guard и переопределить getBasicCredentials() метод. Наконец в config/auth.php задавать 'driver' => 'my_driver'

Если вы выбрали второй метод и вам нужна дополнительная помощь, напишите комментарий …

1

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

Других решений пока нет …

По вопросам рекламы [email protected]