更改 Laravel 5.6 的登录规则

问题描述 投票:0回答:2

我安装了一个新的 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,
        ]);
    }

}
php laravel laravel-5
2个回答
2
投票

您编辑了错误的方法。此方法验证请求,“true”不是验证规则,这就是您收到错误的原因。

这是一个简单的解决方案。覆盖

LoginController
上的凭据方法,如下所示。

protected function credentials(Request $request)
{
    $data = $request->only($this->username(), 'password');
    $data['is_active'] = true;
    return $data;
}

这样只有活跃用户才能登录。

您还可以创建一个中间件,并使用它将尚未激活帐户的用户发送到激活页面。


-1
投票

我为一个带有中间件的项目做了这个:

<?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;
  }
© www.soinside.com 2019 - 2024. All rights reserved.