Php Laravel-5登录后重定向到/主页

Php Laravel-5登录后重定向到/主页,php,laravel,laravel-5,laravel-5.1,Php,Laravel,Laravel 5,Laravel 5.1,我正在使用Laravel-5.1中的角色构建一个自定义身份验证系统 我有两组用户,主管和管理员。但我只有一个登录页面。因此,当用户登录时,它首先验证他们的凭据,然后我编写了一个中间件来检查他们是哪种类型的用户 如果他们是管理员,它应该将他们重定向到/admin/home。如果他们是主管,则应将他们重定向到supervisor/home 我可以从源文件illumb/Foundation/Auth/RedirectsUsers.php中看到默认重定向是到/home。但是,我如何才能改变它,使之成为动

我正在使用Laravel-5.1中的角色构建一个自定义身份验证系统

我有两组用户,主管和管理员。但我只有一个登录页面。因此,当用户登录时,它首先验证他们的凭据,然后我编写了一个中间件来检查他们是哪种类型的用户

如果他们是管理员,它应该将他们重定向到
/admin/home
。如果他们是主管,则应将他们重定向到
supervisor/home

我可以从源文件
illumb/Foundation/Auth/RedirectsUsers.php
中看到默认重定向是到
/home
。但是,我如何才能改变它,使之成为动态的

我的路线文件:

/* Administrator Routes */

Route::group(['namespace' => 'Admin', 'middleware' => 'timesheets.admin:1'], function()
{
    return Route::get('admin/home', 'AdminController@index');
});

/* Supervisor Routes */

Route::group(['namespace' => 'Supervisor', 'middleware' => 'timesheets.supervisor:2'], function()
{
    return Route::get('supervisor/home', 'SupervisorController@index');
});
<?php

namespace App\Http\Middleware\Auth;

use Closure, App;
use Illuminate\Contracts\Auth\Guard;

class AdminAuthenticate
{
    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    /**
     * Create a new filter instance.
     *
     * @param  Guard  $auth
     * @return void
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('login');
            }
        }

        /* Get user id */
        $userId = $this->auth->user()->userId();

        if (auth()->check() && auth()->user()->hasRole($userId, $role)) {
            return $next($request);
        }
        else
        {
            App::abort(403);
        }

    }
}
我的中间件文件:

/* Administrator Routes */

Route::group(['namespace' => 'Admin', 'middleware' => 'timesheets.admin:1'], function()
{
    return Route::get('admin/home', 'AdminController@index');
});

/* Supervisor Routes */

Route::group(['namespace' => 'Supervisor', 'middleware' => 'timesheets.supervisor:2'], function()
{
    return Route::get('supervisor/home', 'SupervisorController@index');
});
<?php

namespace App\Http\Middleware\Auth;

use Closure, App;
use Illuminate\Contracts\Auth\Guard;

class AdminAuthenticate
{
    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    /**
     * Create a new filter instance.
     *
     * @param  Guard  $auth
     * @return void
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('login');
            }
        }

        /* Get user id */
        $userId = $this->auth->user()->userId();

        if (auth()->check() && auth()->user()->hasRole($userId, $role)) {
            return $next($request);
        }
        else
        {
            App::abort(403);
        }

    }
}

首先,在AuthController中设置
$redirectPath
,如下所示:

$redirectPath = 'Path/to/standard/user/on/authentication'
创建一个名为Admin的新中间件,如下所示:

public function handle($request, Closure $next)
{
    if ( Auth::check() && Auth::user()->isAdmin() )
    {
        return redirect('path/to/admin');
    }

    return $next($request);
}
您需要在您的用户模型中创建一个新方法来检查admin

像这样:

public function isAdmin()
{
    return $this->admin;
}
这将返回users表中admin字段的值

然后在您的
管理器控制器上
\uuu construct()
可以调用您的管理中间件:

public function __construct()
{

    $this->middleware('admin');

}

这将使管理员登录到标准登录,但几乎立即将其重定向到管理员主页

这似乎不起作用。重定向没有发生。您是否在Kernel.php中添加了
'admin'=>\App\Http\Middleware\admin::class,
?@V4n1ll4抱歉,我已更新了管理中间件方法。请试一试。谢谢,但现在它看起来像是在做一个无限重定向循环
页面没有正确重定向
我应该现在删除管理路由上的中间件吗?