Laravel 关闭浏览器并重新打开后,管理员未重定向到/Admin
我在LoginController中有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
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
作为过滤器。但我强烈建议您使用/
或/重定向用户
。。。你说得对。