首页 > 解决方案 > 根据条件 Laravel 8 将登录重定向到不同的路由

问题描述

我试图在登录成功时进行登录重定向,而不是在一个名为estado= 2 的变量而是到重置密码视图时进行登录,不是因为登录失败,而是因为当estado用户的变量等于 2 时,这意味着它具有默认值密码,出于安全原因,我想在用户第一次登录时更改密码。(默认密码与用户名相同,这就是我计划在您第一次登录时强制更改密码的原因)。

我是 Laravel 的新手,所以不确定我需要在哪里进行更改才能做到这一点,但我认为它在中间件 RedirectIfAuthenticated 中。

<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  ...$guards
     * @return mixed
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        return $next($request);
    }
}

如果我没有明确我需要什么,我可以更好地解释它,英语不是我的主要语言,所以对任何问题感到抱歉。在我使用忘记我功能更改密码后,我将estado变量更改为 1,我计划为此重新启动它,以便在将来用户登录时它可以正常登录并回家。

标签: laravelauthenticationlaravel-8

解决方案


该行:

return redirect(RouteServiceProvider::HOME);

家是不变的/home

您可以在此行添加 if 条件:

If Auth::user()->estado == 2
return redirect(“your reset password route”);

然而,解决此问题的更好方法是创建一个新的middleware并将此条件放入其中,并使用此中间件保护所有经过身份验证的路由。


推荐阅读