2016-07-27 3 views
0

В Laravel 5.2, я добавил has_login поле в таблице users.Отключить Войти в Laravel 5.2

Где я могу добавить логику для предотвращения входа пользователя в систему, если has_login является значением 0 в таблице users? Я использую AuthController.php для аутентификации и use AuthenticatesAndRegistersUsers без использования login()/authenticate() функций в файле AuthController.hp. Вход работает нормально.

+0

Эта логика должна быть в Authenticate.php внутри папки Middleware. –

+0

@MarkoMilivojevic Какая разница между Authenticate.php внутри папки Middleware и AuthController.php в контроллере? –

+0

Поскольку каждый запрос проходит через это промежуточное программное обеспечение. Вы можете увидеть $ routeMiddleware в kernel.php. –

ответ

1

Я лично, как правило, сделать это в промежуточном слое, но вы также можете сделать это за пределами этого.

Вот пример промежуточного слоя:

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; 

class RequireHasLogin 
{ 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string|null $guard 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     if (Auth::guard($guard)->check()) 
     { 
      if (!Auth::guard($guard)->user()->has_login) 
      { 
       Auth::logout(); 
       if ($request->ajax() || $request->wantsJson()) 
       { 
        return response('Unauthorized.', 401); 
       } 
       return redirect()->guest('/auth/login'); 
      } 
     } 

     return $next($request); 
    } 

} 

Хотя я думаю, что некоторые люди делают это слишком:

Auth::guard()->attempt(["email" => $email, "password" => $password, "has_login" => true]) 
+0

Нужно ли мне указывать класс' RequireHasLogin'? –

+0

Да. Вы добавляете его в '$ routeMiddleware' внутри' app/Http/Kernel.php' – SysVoid

+1

Решил ли я вашу проблему? – SysVoid

Смежные вопросы