首页 > 其他分享 >Laravel 11.x 未认证用户如何自定义重定向

Laravel 11.x 未认证用户如何自定义重定向

时间:2024-11-03 23:20:45浏览次数:6  
标签:Laravel 11 自定义 admin Middleware request function login route

很久没玩Laravel,这次将原来的一个内容网站升级到最新版Laravel,发现版本已从laravel7.x到laravel11.x了,网站比较简单大部分更新都很顺利。

但是也

遇到了问题

网站前端和后台分别使用了2套用户登录验证,前端使用了laravel/ui的用户认证,打开需要用户认证的界面时,能正常跳转到登录界面,而后台不能跳转到后台登录界面了,直接跳回到了首页。

奈何?

找找原因

Laravel 7.x前端未认证用户的重定向的设置是在 app/Http/Middleware/Authenticate.php

// app/Http/Middleware/Authenticate.php

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

后端未认证用户的重定向设置,我增加了一个中间件 AdminAuthenticate.php 

// app/Http/Middleware/AdminAuthenticate.php

class AdminAuthenticate
{
    public function handle($request, Closure $next, $guard = 'admin')
    {        
        if (!Auth::guard($guard)->check()) {  
            return redirect()->route('admin.login');
        }

        return $next($request);
    }
}

对照了下Laravel 7.x 和 Laravel 11.x版本,app/Http/Middleware中间件已移动到框架,以前的设置无效了,需要调整用户重定向设置方法。

继续查找

解决办法

原来,在Laravel11.x中,设置已迁移到了 bootstrap/app.php 的 withMiddleware 方法回调参数方法中,使用回调方法框架侧的中间件参数,调用redirectGuestsTo方法传入自定义跳转路径。

->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectGuestsTo('/login');
    // 或者使用闭包方法,使用路由参数
    // $middleware->redirectGuestsTo(fn (Request $request) => route('login'));
})

但是这样只能统一跳转到前端登录界面,如何为后台设置未认证用户的重定向?

1)登录路由配置如下:

//后台管理
Route::namespace('Admin')->as('admin.')->group(function () {
    ……

    // 登录页面
    Route::get('/login', [LoginController::class, 'index'])->name('login');
    ……

});

2)修改 withMiddleware 方法中的代码

->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectGuestsTo(function (Request $request){
        if (!$request->expectsJson()) {
            if (in_array('auth:admin', $request->route()->middleware())) {
                if (!auth('admin')->check()) {
                    return route('admin.login');
                }
            }
        }
        return route('login');
    });
})

搞定,一些逻辑判断再根据需要完善。

标签:Laravel,11,自定义,admin,Middleware,request,function,login,route
From: https://blog.csdn.net/ovseawind/article/details/143466534

相关文章

  • 11.03学习
    一、主函数和exit函数主函数( main 函数)1. 入口点: main 函数是C程序的入口点,程序执行从这里开始。2. 返回类型: main 函数可以返回 int 类型,也可以返回 void 类型。但在现代C语言标准(C99及以后)中,推荐使用 int 类型。3. 参数: main 函数可以接受两个参数,通常......
  • 10.28 ~ 11.3 总结
    联考联考打得不怎么样,一个原因是有两场T3T4全放DS,可能适合叫练习赛,但是顶个模拟赛的名字就有点有点了。但是省选联考本来认为擅长的T1这样的题目也没有做出来。题解还是在这里https://www.cnblogs.com/british-union/p/liankao.html。做题ARC155D对于博弈论的题目目前......
  • P11229 [CSP-J 2024] 小木棍 题解
    算法一,dp首先对于\(10^5\)的数据,很明显,如果用longlong是绝对会爆炸的,所以使用string类型进行dp.定义状态\(f_i\),表示用\(i\)根木棍能拼出的最小数字.显然,可以先初始化1~7的情况.状态转移:\(f_i=cmp(f_i,f_{i-stk_j}+j).\),其中,cmp为比较函数,j为0~9......
  • 2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice 和 Bob 正在进行一个有 n 个关
    2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice和Bob正在进行一个有n个关卡的游戏,其中每个关卡要么是困难模式(possible[i]==0),要么是简单模式(possible[i]==1)。玩家在游戏中获得分数的规则如下:通过简单模式的关卡可得1分,而遇到困难模式的关卡将扣除1分。Alice从......