У меня есть маршрут:
Route::get('/', array('before' => 'auth.basic', function() {
return Response::json(
array(
'name' => 'John Smith',
'age' => 42
)
);
}));
Я хочу добавить where active= 1
на запрос аутентификации.
Я знаю, что могу добавить дополнительные условия Auth::attempt()
но я не знаю, как это сделать, используя Auth::basic()
,
Есть два способа сделать это.
Это простой способ. Направляйтесь к 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()
вызывается (за исключением «активной» части, очевидно)
Теперь это «более элегантный» способ сделать это. Хотя я не знаю, действительно ли это того стоит в вашем случае. Я также не собираюсь описывать это в каждой детали.
Для расширения 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'
Если вы выбрали второй метод и вам нужна дополнительная помощь, напишите комментарий …
Других решений пока нет …