我安装了一个新的 Laravel 5.6 项目。我更改了
create_users_migration
,添加了 $table->boolean('is_active');
字段。现在,我希望当用户尝试登录时,检查 is_active
字段是否设置为 true。
我尝试重写标准
AuthenticatesUsers
方法:
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
]);
}
在
password
之后,我添加了行 'is_active' => true,
,现在,当我按下“登录”按钮时,它会返回一个 array_map(): Argument #2 should be an array
错误。
我尝试将此方法复制粘贴到
LoginController
中,但它给了我同样的错误。有什么想法,或者可能是另一种解决方案?
完整
LoginController
代码:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
'is_active' => true,
]);
}
}
您编辑了错误的方法。此方法验证请求,“true”不是验证规则,这就是您收到错误的原因。
这是一个简单的解决方案。覆盖
LoginController
上的凭据方法,如下所示。
protected function credentials(Request $request)
{
$data = $request->only($this->username(), 'password');
$data['is_active'] = true;
return $data;
}
这样只有活跃用户才能登录。
您还可以创建一个中间件,并使用它将尚未激活帐户的用户发送到激活页面。
我为一个带有中间件的项目做了这个:
<?php
namespace App\Http\Middleware;
use Closure;
class isActiv
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->user()->isActiv()){
return $next($request);
}else{
return redirect()->route('dashboard')->with('errors', 'Votre compte utilisateur n\'est pas activé sur le site. Veuillez contacter un administrateur pour résoudre le problème.');
}
}
}
然后在我的路线文件中
web.php
:
Route::group(['middleware' => ['isActiv'] ], function(){
在我的用户模型中:
public function isActiv(){
if($this->is_activ == 1 || $this->is_admin == 1){
return true;
}
return false;
}