Laravel 5.1页面认证使用路由

4
我正在处理一个需要管理员面板的网站。目前我正试图设置该面板的身份验证,但是我找不到拒绝任何访客用户(非管理员)访问的方法。当然,我有一个登录页面,登录后它会路由到管理员页面,但是在未登录时也可以直接访问/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');
 }*/
}

I could really use some help here, because I'm totaly stuck, and yes, I have read the documentation, though maybe I'm just missing something.


您希望任何登录用户都能够进入管理员界面吗?还是只允许“某些”已登录的用户进入? - Amarnasan
只有管理员有账户,没有注册页面。 - Grey
2个回答

1
您应该使用中间件来处理用户的身份验证。
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”中间件。 - Amarnasan

1
假设你有这样一行代码:
'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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接