2015-11-12 54 views
0

我想檢查中間件的帳戶狀態。狀態由tinyint表示。如果它是1,那麼它被激活時,否則爲0。Laravel身份驗證:如何獲取用戶屬性?

在應用\ HTTP \中間件\身份驗證,我有:

public function handle($request, Closure $next) 
{ 
    if ($request->input('status') == 0) 
    { 
     Session::flash('message', 'Your account hasn\'t been activated, please try again later.'); 
     return redirect('/'); 
    } 

    if ($this->auth->guest()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('auth/login'); 
     } 
    } 

    return $next($request); 
} 

$請求 - >輸入( '狀態')== 0可能是錯誤。我應該怎麼做?

回答

1

首先,我建議在檢查狀態之前檢查用戶是否是訪客。否則,你會試圖抓住客人的狀態,這是不可能的。

其次,你必須與user方法訪問用戶,所以你可以只搶掉用戶這樣的狀態:

public function handle($request, Closure $next) 
{ 
    if ($this->auth->guest()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('auth/login'); 
     } 
    } 

    if ($this->auth->user()->status === 0) { 
     Session::flash('message', 'Your account hasn\'t been activated, please try again later.'); 
     return redirect('/'); 
    } 

    return $next($request); 
} 

額外花絮:Laravel有一個$casts屬性,你可以添加到您的模型。所以,如果您添加到您的用戶模式:

protected $casts = [ 
    'status' => 'boolean' 
]; 

它會自動轉換「中投」 status成一個布爾值,因此你可以這樣做:

if (!$this->auth->user()->status) { 
    // User's status is false 
}