如何在laravel 5.3中登录时检查用户状态?

Zam*_*man 5 authentication middleware laravel laravel-middleware

我使用过Laravel Authentication(快速入门).但我需要检查用户的状态(已批准/待定).如果未获批准,则会在登录页面中显示错误.我需要知道我必须在哪个文件中进行更改以及更改内容.目前我正在研究Laravel 5.3.

Cam*_*jas 12

您可以创建Laravel Middleware检查链接以获取其他信息

php artisan make:middleware CheckStatus
Run Code Online (Sandbox Code Playgroud)

修改你的中间件得到

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class CheckStatus
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        //If the status is not approved redirect to login 
        if(Auth::check() && Auth::user()->status_field != 'approved'){
            Auth::logout();
            return redirect('/login')->with('erro_login', 'Your error text');
        }
        return $response;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将您的中间件添加到您的Kernel.php中

'checkstatus' => \App\Http\Middleware\CheckStatus::class,
Run Code Online (Sandbox Code Playgroud)

最后将中间件添加到您的路线中

Route::post('/login', [
    'uses'          => 'Auth\AuthController@login',
    'middleware'    => 'checkstatus',
]);
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助


小智 5

我为此找到了一个简单的解决方案。Artisan create App\Http\Controllers\Auth\LoginController,在这个默认控制器中,如果您有一些登录条件,只需添加此代码,例如我有一个字段state,您可能有status, email_status或其他。

// Custom code for Auth process
protected function credentials( Request $request )
{
    $credentials = $request->only($this->username(), 'password');

    $credentials['state'] = 1;

    return $credentials;

}
Run Code Online (Sandbox Code Playgroud)