Использование промежуточного программного обеспечения Laravel Auth

Laravel 5.1 действительно имел минимальную документацию .. Мне нужно четкое представление о том, как защитить маршруты с помощью промежуточного программного обеспечения Auth ..

В документации указано добавить в маршрут параметр "middleware" => "auth". или могу сделать

    public function __construct() 
    {
      $this->middleware('auth');
    }

Но как использовать промежуточное ПО Auth для фактической аутентификации пользователя и автоматического перенаправления / входа в систему с защищенных маршрутов?


person harish    schedule 23.08.2015    source источник


Ответы (3)


В Kernel.php есть зарегистрированные промежуточные программы в защищенном $ routeMiddleware, например:

/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];

Вы можете видеть, что auth зарегистрирован для использования App \ Http \ Middleware \ Authenticate.

Затем вы можете следовать по этому пути - если вы откроете /app/Http/Middleware/Authenticate.php, вы найдете дескриптор общедоступной функции:

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->guest())
        {
            if ($request->ajax())
            {
                return response('Unauthorized.', 401);
            }
            else
            {
                return redirect()->guest('auth/login');
            }
        }

        return $next($request);
    }

и здесь осуществляется управление перенаправлением, и вы можете изменить его для своих нужд или создать собственное промежуточное ПО.

наконец - как написано в документации - в контроллер, который нужно будет аутентифицировать, вы добавите

public function __construct() 
{
  $this->middleware('auth');
}

Вы можете создать собственное промежуточное ПО, если оно вам не подходит.

person Angel M.    schedule 23.08.2015
comment
Я уже сделал это ... все ... Я думал, что что-то осталось ... поскольку URL-адреса моего контроллера не перенаправляются на URL-адрес входа для гостей ... Я использую контроллер, созданный с помощью команды для контроллера ресурсов - person harish; 23.08.2015
comment
так это проблема маршрутизации? может вам нужно настроить маршруты? - person Angel M.; 23.08.2015
comment
Route :: group (['prefix' = ›'user'], function () {Route :: get ('/', ['uses' =› 'UserController @ index']); Route :: match ([' get '],' / logout ', [' uses '= ›' UserController @ logout ']); Route :: match ([' post ',' get '],' / login ', [' uses '=›' » UserController @ login ']); Route :: match ([' post ',' get '],' register ', array (' uses '= ›UserController @ register)); Route :: get (' / profile ', array ('uses' = ›UserController @ profile));}); - person harish; 23.08.2015
comment
Мое плохое ... Может быть, сейчас он работает ... Теперь моя страница вошла в бесконечный цикл перенаправления ... может быть потому, что я использовал настраиваемое перенаправление во всех действиях. Страница не перенаправляется должным образом - person harish; 23.08.2015
comment
хорошо, но почему бы вам не использовать маршруты как: Route :: resource ('/', 'UserController', ['only' = ›['index', 'logout', 'register', 'profile']]) ; - person Angel M.; 23.08.2015
comment
Route :: resource (... Не работает и страница не перенаправляется должным образом. Проблема сохраняется ..... :( - person harish; 23.08.2015
comment
попробуйте использовать его так: Route :: group (['prefix' = ›'user'], function () {Route :: get ('/', ['uses' =› 'UserController @ index']); Route :: get ('/ logout', ['uses' = ›'UserController @ logout']); Route :: get ('/ login', ['uses' =› 'UserController @ login']); Route :: get ('/ register', ['uses' = ›'UserController @ register']); Route :: get ('/ profile', ['uses' =› UserController @ profile]);}); хм, я не уверен, потому что не знаю, что у вас в UserController. Например, для постов я использую разные методы вроде postLogin ... - person Angel M.; 23.08.2015
comment
Теперь проблема решена для меня. codeheaps .com / php-programming / был полезен - person harish; 24.08.2015
comment
@harish, это здорово - person Angel M.; 24.08.2015
comment
На самом деле Laravel 5 потрясающий ... Пространства имен PHP - это то, о чем вы должны хорошо разбираться. - person harish; 25.08.2015
comment
Да, это так. И работа с пространствами имен действительно потрясающая - так я могу импортировать внешние библиотеки без особых усилий. - person Angel M.; 25.08.2015

В laravel 5.2, если вы хотите скрыть форму регистрации или представления формы входа, вы должны использовать свое промежуточное ПО как:

$this->middleware('mymiddleware', ['only' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);

OR

$this->middleware('mymiddleware', ['except' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);

Это связано с тем, что маршруты регистрации и входа являются методами публикации в AuthController, а showXxxxForm - представлениями формы.

Надеюсь, это кому-нибудь поможет.

person Bruno Pires Lavigne Quintanilh    schedule 07.01.2016

В Laravel промежуточное ПО используется для некоторых маршрутов, доступ к которым имеет только пользователь, входящий в систему, в противном случае он будет перенаправлен на страницу входа.

Auth::routes();
Route::middleware(['auth'])->group(function () {
//After Login the routes are accept by the loginUsers...

}
Route::middleware(['admin'])->group(function(){
//the Admin is logged in to access the Routes...
}
person Vignesh    schedule 14.03.2021