Laravel 5.7 перенаправляется слишком много раз, когда я использую черты экрана блокировки - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь создать приложение Laravel, и я хотел бы добавить функцию блокировки экрана, и я искал в Google, чтобы увидеть, как это работает,

И я нахожу этот красивый и простой учебник GitHub: laravel-auth-lock-screen

Но похоже, что в коде что-то не так, Может кто-нибудь мне помочь, пожалуйста!

Ошибка После истечения времени ожидания сеанса приложение перенаправляет меня на корректный маршрут «вход в систему / заблокирован», но браузер показывает, что localhost перенаправляет вас слишком много раз. 'ERR_TOO_MANY_REDIRECTS'

Маршрут \ web.php

<?php

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::get('login/locked', 'Auth\LoginController@locked')->middleware('auth')->name('login.locked');
Route::post('login/locked', 'Auth\LoginController@unlock')->name('login.unlock');

LoginController

class LoginController extends Controller
{


    use AuthenticatesUsers;

    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except([
            'logout',
            'locked',
            'unlock'
        ]);
    }

    public function locked()
    {
        if(!session('lock-expires-at')){
            return redirect('/');
        }

        if(session('lock-expires-at') > now()){
            return redirect('/');
        }

        return view('auth.locked');
    }

    public function unlock(Request $request)
    {
        $check = Hash::check($request->input('password'), $request->user()->password);

        if(!$check){
            return redirect()->route('login.locked')->withErrors([
                'Your password does not match your profile.'
            ]);
        }

        session(['lock-expires-at' => now()->addMinutes($request->user()->getLockoutTime())]);

        return redirect('/');
    }
}

Middleware

<?php

namespace App\Http\Middleware;

use Closure;

class AuthLock
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(!$request->user()){
            return $next($request);
        }

        // If the user does not have this feature enabled, then just return next.
        if (!$request->user()->hasLockoutTime()) {
            // Check if previous session was set, if so, remove it because we don't need it here.
            if (session('lock-expires-at')) {
                session()->forget('lock-expires-at');
            }

            return $next($request);
        }

        if ($lockExpiresAt = session('lock-expires-at')) {
            if ($lockExpiresAt < now()) {
                return redirect()->route('login.locked');
            }
        }

        session(['lock-expires-at' => now()->addMinutes($request->user()->getLockoutTime())]);

        return $next($request);
    }
}

Модель пользователя

use LockableTrait;

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 июля 2019

Вы можете решить проблему следующим образом: исключить auth.lock из:

protected $middlewareGroups = [
    'web'=>...

В route \ web.php создайте группу маршрутов для всех маршрутов, кроме login \ locked и добавьте ваше промежуточное ПО auth.lock в эту группу:

Route::group(['middleware' => ['auth.lock']], function () {
    Route::get('/home', ['uses' => 'HomeController@index', 'as' => 'home']);
    ...
}
0 голосов
/ 13 января 2019

Обновление Ребята, я продолжаю пытаться исправить проблему, и обнаружил, что она перенаправляет меня много раз, потому что я добавляю промежуточное программное обеспечение AuthLock в веб-группу в классе Kernal

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'auth.lock'
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

Теперь я долго искал, как применить промежуточное ПО для всех приложений, кроме маршрутов login,login.locked and login.unlock, есть какая-нибудь помощь, пожалуйста?

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