2016-09-28 132 views
3

我已经使用Laravel身份验证(快速入门)。但我需要检查用户的状态(已批准/正在审批)。如果没有获得批准,则会在登录页面中显示错误。我需要知道我必须在哪个文件中进行更改以及更改。目前我正在致力于Laravel 5.3。如何在laravel 5.3中登录时检查用户状态?

回答

6

您可以创建Laravel Middleware检查链接以获取更多信息

php artisan make:middleware CheckStatus 

修改您的中间件获得

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

那么你的中间件添加到您的Kernel.php

'checkstatus' => \App\Http\Middleware\CheckStatus::class, 

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

Route::post('/login', [ 
    'uses'   => 'Auth\[email protected]', 
    'middleware' => 'checkstatus', 
]); 

希望它有帮助

+0

如何在我的路由中添加中间件,因为web.php中没有这样的路由? – Zaman

+0

@Efaz检查[this](https://laracasts.com/discuss/channels/general-discussion/how-to-name-laravel-52-auth-routes)覆盖你的'Auth :: routes();' –

+0

这不适用于5.3。*请 –

0

按照以下步骤...

首先在用户表(假设is_approved)

在app/HTTP /控制器/认证/ LoginController中文件

public function authenticate() 
{ 
    if (Auth::attempt(['email' => $email, 'password' => $password, 'is_approved'=>1])) { 
     // Authentication passed... 
     return redirect()->intended('dashboard'); 
    } 
} 

希望这会增加一列将帮助

1

上的答案为我节省了

if (Auth::attempt(['email'=>$input['email'],'password'=>$input['password'], 'user_status'=>1 ])) 

这将检查状态

+0

@ saad,哪个文件添加这段代码 –

0

我不上答案达成一致,这将导致你的应用程序的性能是非常低的,也不建议修改Laravel的源代码。

所以,你可以重写getCredentials功能,以您的应用程序\ HTTP \ \控制器验证\ AuthController.php文件是这样的:

<?php 
//app\Http\Controllers\Auth\AuthController.php 
namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 
use Illuminate\Http\Request; 

class AuthController extends Controller 
{ 
use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    //you need add this function 
    protected function getCredentials(Request $request) 
    { 
     $data = $request->only($this->loginUsername(), 'password'); 
     $data['is_approved'] = 1; 
     return $data; 
    } 
} 

,那么你可以直接使用Laravel认证(快速启动)。

希望这会有所帮助。