首页 文章

无法在laravel 5.2上正确重定向登录失败

提问于
浏览
1

我在Laravel 5.2中制作应用程序 . 我正在尝试为后台实现auth页面 .

在路线中我有一个组和auth中间件:

Route::group(['prefix' => 'admin'], function () {
    Route::group(['middleware' => 'auth'], function () {
        Route::get('/', 'IndexController@admin_index')->name('admin_index');
        Route::get('/logout', 'IndexController@admin_logout')->name('logout');
    });

    Route::get('/login', 'UsersController@admin_login')->name('login');
});

我想在这里完成的是当我输入“/ admin”时,如果用户被登录,则重定向到“/”,如果没有,则重定向到“/ admin / login”

登录失败时,当前行为将重定向到“/ login”,如何更改?

1 回答

  • 3

    如果您没有为常规用户提供任何其他受auth保护的页面,您可以简单地修改Authenticate中间件,否则您可能需要扩展Auth中间件以添加对多个重定向点的支持

    选项1,修改中间件:

    public function handle($request, Closure $next, $guard = null)
        {
            if (Auth::guard($guard)->guest()) {
                if ($request->ajax() || $request->wantsJson()) {
                    return response('Unauthorized.', 401);
                } else {
                    // Changing login to admin/login
                    return redirect()->guest('admin/login');
                }
            }
    
            return $next($request);
        }
    

    选项2 - 创建一个auth中间件,让我们说'auth-admin',更改上面显示的handle()方法,并将该中间件应用于管理路由而不是'auth'中间件 .

    选项3 - 在handle()方法中添加条件

    public function handle($request, Closure $next, $guard = null)
        {
            if (Auth::guard($guard)->guest()) {
                if ($request->ajax() || $request->wantsJson()) {
                    return response('Unauthorized.', 401);
                } else {
                    $destination = (strpos($request->path(), 'admin') !== false) ? 'admin/login' : 'login';
                    return redirect()->guest($destination);
                }
            }
    
            return $next($request);
        }
    

相关问题