2017-02-02 7 views
0

Я в процессе обновления нашего веб-приложения от laravel 4.2 до laravel 5.2. Мне удалось решить большинство проблем, но эта конкретная проблема ведет меня в циклы.Группа промежуточного программного обеспечения Laravel показывает страницы, когда пользователь не вошел в систему

Это как маршрут группа для администратора приборной панели выглядит следующим образом:

Route::group(['middleware' => 'web','prefix' => 'adm'], function() 
{ 
     Route::get('login', ['as' => 'admin.login.view', 'uses' => '[email protected]']); 
     Route::post('login', ['as' => 'admin.login.attempt', 'uses' => '[email protected]']); 
     Route::get('logout', ['as' => 'admin.logout', 'uses' => '[email protected]']); 

...other routes pertaining to admin dashboard 
} 

Логина функции и все функции в рамках работы админ-панели, как и ожидалось. Единственная проблема - когда пользователь выходит из системы, любой может получить доступ к оставшимся маршрутам на панели администратора (без входа в систему). Я поставил Auth :: check() и проверял auth в разных контроллерах, логин и выход выполняются, как и ожидалось.

Auth :: check() завершается с ошибкой, если пользователь не вошел в систему и не выполнил вход, если пользователь вошел в систему. Как убедиться, что все маршруты в этой группе доступны только для зарегистрированных пользователей. Я попытался создать другое промежуточное программное обеспечение, называемое authAdmin, и попытался использовать его вместо промежуточного программного обеспечения. В этом случае я даже не могу войти.

+0

Вы м на две сессии? Как обычный пользователь и администратор? –

+0

В настоящее время я этого не делаю. Но в идеале я хотел бы поддерживать 2 сеанса для обычных пользователей и администраторов. – pixelscreen

+1

Ваша проблема даже после истечения срока действия пользователя, вы можете получить доступ к странице, доступ к которой возможен только тогда, когда человек вошел в систему? Тогда я думаю, что проблема заключается в том, как вы обрабатываете маршрут «auth». Вы вызываете его на контроллере или в группе маршрутов? –

ответ

0

создать новые промежуточный программное обеспечение для входа в системе и на странице выглядеть следующим образом

namespace App\Http\Middleware; 

use Closure; 
class Login 
{ 
    public function handle($request, Closure $next) 
    { 
     $messages = config('message'); 

     if ($request->session()->has('userId')) { 
      return $next($request); 
     } 

     return redirect('/')->withErrors("Please login first"); 
    } 
} 

В Kenel.php Регистра Войти класс

protected $routeMiddleware = [ 
    'login'  => \App\Http\Middleware\Login::class, 
    ... 

В файле маршрут

Route::group(['middleware' => ['web'],'prefix' => 'adm'], function() { 

    Route::get('login', ['as' => 'admin.login.view', 'uses' => '[email protected]']); 
    Route::post('login', ['as' => 'admin.login.attempt', 'uses' => '[email protected]']); 
    Route::get('logout', ['as' => 'admin.logout', 'uses' => '[email protected]']); 

    Route::group(['middleware' => 'login'], function() { 
     [Your other route here] 
    }); 
)}; 

Надеется, что это help

+0

Спасибо, уже разобрался. Я приму свой ответ, потому что это правильно! – pixelscreen