我正在使用Laravel 5.3,我使用make:auth
来构建注册/登录系统。我想知道如何添加另一个参数来检查登录,除了检查用户名和密码是否与匹配的DB行相对应?
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
根据我的理解,重定向到中间件RedirectIfAuthenticated
,但那个中间件是这样的:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
我几乎可以肯定我必须添加一个自定义后卫,但即使在我在网上查看的文档中,也有点令人困惑..任何人都有一个链接可以很好地解释这个问题吗?或者可能是一个示例代码?
答案 0 :(得分:2)
是的,您可以通过覆盖 LoginController.php
中的AuthenticatesUsers
credentials()方法来实现
use Illuminate\Http\Request;
protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials['active'] = 1;
return $returnArray;
}
此示例是最常见的用例,用户只有在其帐户处于活动状态时才能登录。
如果您想使用其他表而不是users
,则需要customize guard
在 config / auth.php
中添加一个'guards' => [
'user' => [
...
],
'customer' => [
'driver' => 'session',
'provider' => 'customers',
],
],
...
'providers' => [
'users' => [
...
],
'customers' => [
'driver' => 'eloquent',
'model' => App\Customer::class,
],
],
然后,在 LoginController.php
中添加此内容use Illuminate\Support\Facades\Auth;
protected function guard()
{
return Auth::guard('customer');
}
如文档中所述,您也可以在RegisterController
和ResetPasswordController
中使用相同内容。