我有一条路线:
Route::get('/', array('before' => 'auth.basic', function() {
return Response::json(
array(
'name' => 'John Smith',
'age' => 42
)
);
}));
我想要的是将where active= 1
添加到身份验证查询中。
我知道我可以为Auth::attempt()
添加额外条件,但我不知道如何使用Auth::basic()
执行此操作。
答案 0 :(得分:1)
有两种方法可以做到这一点。
这是一个简单的方法。转到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()
被调用时所做的事情(显然除了活跃的部分)
现在,这更优雅了#34;这样做的方式。虽然我不知道在你的情况下它是否真的值得。我也不打算详细描述它。
要扩展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 :(得分:0)
我是如何做到的(Laravel 5.8):
SessionGuard的方法basic
和basicOnce
接受两个参数:$field
(可在其中设置用户名列)和$extraConditions
(可在其中设置其他条件)。
您可以扩展AuthenticateWithBasicAuth
并覆盖handle
方法来获取类似的信息
class CustomBasicAuth extends AuthenticateWithBasicAuth
public function handle($request, Closure $next, $guard = null, $field = null)
{
$this->auth->guard($guard)->basic('email', ['active' => 1]);
return $next($request);
}
并且不要忘记注册和使用新的中间件。