【问题标题】:Laravel 5.1 page authentication using routesLaravel 5.1 页面认证使用路由
【发布时间】:2016-03-19 22:42:48
【问题描述】:

我正在开发一个需要管理面板的网站。我目前正在尝试设置该面板的身份验证,但我找不到拒绝任何来宾用户(非管理员)访问的方法。当然,我有一个登录页面,登录后,它会路由到管理页面,不过你也可以在没有登录的时候去 /admin。

routes.php

Route::get('home', function(){
if (Auth::guest()) {
    return Redirect::to('/');
} else {
    return Redirect::to('admin');
}
});

Route::get('admin', function () {
    return view('pages.admin.start');
});

MainController.php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class MainController extends Controller {

 public function getIndex() {
    return view('pages.index');
 }

 public function getAbout() {
    return view('pages.about');
 }

 public function getPortfolio() {
    return view('pages.portfolio');
 }

 public function getShop() {
    return view('pages.shop');
 }

 public function getContact() {
    return view('pages.contact');
 }

 /*public function getAdmin() {
      return view('pages.admin.start');
 }*/
}

我真的可以在这里使用一些帮助,因为我完全被卡住了,是的,我已经阅读了文档,但也许我只是遗漏了一些东西。

【问题讨论】:

  • 您希望任何登录都能够访问管理员吗?还是只有“一些”登录用户?
  • 只有管理员有账号,没有注册页面

标签: php laravel authentication laravel-5


【解决方案1】:

您应该使用Middleware 来处理您的用户身份验证

1) 首先,您必须创建一个中间件,该中间件将检查需要该页面的用户是否是管理员,如果不是,您必须重定向;像这样:

class AdminMiddleware
{
    public function handle(Request $request, Closure $next )
    {
        //if User is not admin
           //redirect to no permess

        return $next($request);
    }
}

2) 然后您必须将中间件绑定到您希望只能从管理员用户访问的路由:

//bind the middleware to all the routes inside this group
Route::group( ['middleware' => 'adminmiddleware' ], function()
{
    Route::get('admin', function () {
       return view('pages.admin.start');
    });

    //other routes   
});

【讨论】:

  • 而且他可能可以使用开箱即用的Authenticate 中间件。
【解决方案2】:

假设你有这样一行:

'auth' => 'App\Http\Middleware\Authenticate',

在您的app/Http/Kernel.php 文件中:

将您需要“认证”的所有路由放在分组中,但将“访客”路由保留在它们之外:

Route::get('home', function(){
if (Auth::guest()) {
    return Redirect::to('/');
} else {
    return Redirect::to('admin');
}
});



Route::group( ['middleware' => 'auth' ], function(){
    Route::get('admin', function () {
        return view('pages.admin.start');
    });
    Route::just-another-route()...;
    Route::just-another-route()...;

});

文档:http://laravel.com/docs/5.1/routing#route-groups

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 2015-07-31
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多