Laravel Web中间件组在用户未登录时显示页面

时间:2017-02-02 03:44:25

标签: php laravel laravel-5.2

我正在将我们的网络应用程序从laravel 4.2升级到laravel 5.2。我设法解决了大部分问题,但这个特殊的问题让我陷入了困境。

管理仪表板的路径组如下所示:

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

 ...other routes pertaining to admin dashboard
}

管理面板中的登录功能和所有功能均按预期工作。唯一的问题是当用户注销时,任何人都可以访问管理面板中的其余路径(无需登录)。我已经放置了Auth :: check()并在各种控制器中检查了auth,登录和注销按预期工作。

如果用户未登录,则auth :: check()会失败,如果用户已登录,则会通过。 如何确保该组中的所有路由只能由登录用户访问。我尝试创建另一个名为authAdmin的中间件,并尝试使用它而不是Web中间件。在那种情况下,我甚至无法登录。

1 个答案:

答案 0 :(得分:1)

我为登录创建了新的中间件,在页面中看起来像这样

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' => 'AdminLoginController@loginView']);
    Route::post('login', ['as' => 'admin.login.attempt', 'uses' => 'AdminLoginController@attempt']);
    Route::get('logout', ['as' => 'admin.logout', 'uses' => 'AdminLoginController@logout']);

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

希望这个帮助