2016-09-28 117 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認證(快速啓動)。

希望這會有所幫助。