2015-11-12 2 views
0

Я хотел бы проверить статус учетной записи в промежуточной среде. Статус представлен tinyint. если 1, то он активируется, в противном случае 0.Проверка подлинности Laravel: как получить пользовательские атрибуты?

В App \ Http \ Middleware \ Authenticate, у меня есть:

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

$ 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); 
} 

Extra пикантная: Laravel имеет $casts свойство, которое вы можете добавить к моделям , Итак, если вы добавить к вашей модели пользователя:

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

Она будет автоматически конвертировать «слепок» status в логическое значение, так что вы можете просто сделать это:

if (!$this->auth->user()->status) { 
    // User's status is false 
} 
Смежные вопросы