Laravel 关闭浏览器并重新打开后,管理员未重定向到/Admin

Laravel 关闭浏览器并重新打开后,管理员未重定向到/Admin,laravel,laravel-5.3,Laravel,Laravel 5.3,我在LoginController中有authenticated()方法: protected function authenticated() { if (auth()->user()->is_admin==1) { return redirect('/admin'); } else { return redirect('/home'); } } 和重定向经过身份验证的中间件: public function handle($request, Clos

我在LoginController中有
authenticated()
方法:

protected function authenticated()
{
  if (auth()->user()->is_admin==1) {
    return redirect('/admin');
  } else {
    return redirect('/home');
  }
}
和重定向经过身份验证的中间件:

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {

            return $request->user($guard)->is_admin
            ? redirect('/admin')
            : redirect('/home');
        }

        return $next($request);
    }

当我以管理员身份登录后,它被重定向到
www.mywebsite.com/admin
。但是,在我关闭浏览器并在登录后再次打开浏览器后,我不会被重定向到
www.mywebsite.com/admin
,而只是www.mywebsite.com,它提供的
/home
不是管理面板,而是用户面板。我做错了什么

app/Http/Controllers/Auth
文件夹中,您需要更改位于LoginController、RegisterController和ResetPasswordController中的
$redirectTo
属性

在路由文件
web.php
routes.php
上,根据您使用的Laravel版本,您必须按以下方式指定中间件:

Route::get('admin', function () {
    return "Hello Admin";
})->middleware('admin');
protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

    // YOUR ADMIN MIDDLEWARE HERE
    'admin' => \App\Http\Middleware\AdminMiddleware::class,


    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
app/Http/Kernel.php
上,您应该添加
admin
中间件,如下所示:

Route::get('admin', function () {
    return "Hello Admin";
})->middleware('admin');
protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

    // YOUR ADMIN MIDDLEWARE HERE
    'admin' => \App\Http\Middleware\AdminMiddleware::class,


    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
现在在您的
/home
上,您应该告诉Laravel将用户重定向到
/admin
页面,以防他/她是管理员。在您的
路线上
我建议您创建一个名为
/
的新
路线
,并在那里放置一个过滤器。通常,您会这样做:

Route::get('/', function(){
    if(\Auth::check() && \Auth::user()->is_admin){
         return \Redirect::to('/admin');
    }

     return \Redirect::to('/home');

});
现在,当您不确定将用户发送到何处时,您可以将他/她重定向到
/
,而
/
闭包将为您处理重定向。这在许多情况下都很方便,特别是当您与多个用户一起工作时,例如:
来宾
普通用户
主持人
管理员

最后一步;创建管理中间件:

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {

            return $request->user($guard)->is_admin
            ? redirect('/admin')
            : redirect('/home');
        }

        return $next($request);
    }
php artisan make:middleware AdminMiddleware

class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (\Auth::check() && \Auth::user()->is_admin) {
            return $next($request);
        }

        return redirect('/');

    }
}

你的整个网站上都有中间件吗?@Jerodev是的。我正在本地主机上工作。这实际上是localhost/laraveli,我正在重写
authenticated()
函数,而不是自定义重定向路径,我已经有了adminmiddleware。当管理员登录时,它转到/admin,我关闭浏览器,在管理员登录会话中重新打开它,它转到/home。正是因为如此,您必须设置
/
以过滤连接并重定向用户。如果主页上没有显示任何内容,也可以使用
/home
作为过滤器。但我强烈建议您使用
/
/重定向用户
。。。你说得对。