Laravel 5添加另一个参数来检查登录

时间:2016-09-15 11:11:27

标签: laravel laravel-5

我正在使用Laravel 5.3,我使用make:auth来构建注册/登录系统。我想知道如何添加另一个参数来检查登录,除了检查用户名和密码是否与匹配的DB行相对应?

编辑:我尝试在网上查找,我发现我可以在Auth :: Attempt系列中更改它,但这些都是Laravel 5.2及以下版本。 LoginController有这个:

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);
}

我几乎可以肯定我必须添加一个自定义后卫,但即使在我在网上查看的文档中,也有点令人困惑..任何人都有一个链接可以很好地解释这个问题吗?或者可能是一个示例代码?

1 个答案:

答案 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');
}

如文档中所述,您也可以在RegisterControllerResetPasswordController中使用相同内容。