首页 > 解决方案 > 用户登录并通过身份验证后的 Laravel 重定向逻辑

问题描述

在 Laravel 中,当用户成功填写登录表单时,authenticated会在LoginController. 我的特定应用程序在用户登录后会点击此方法,但我需要添加一个额外的步骤来让用户登录到外部 API 调用。如果该 API 调用失败,我需要将用户重定向回上一个屏幕并删除他们的身份验证。

protected function authenticated(Request $request, User $user)
    {
        Log::info('authenticated');

        //at this point user is authenticated via laravel
        //now I need to login to a third party api
        $call = app('api')->call('user.login', []
        )->content();
        
        //did a successful login token get returned?
        if (isset($call['token']) && isset($call['user'])) {
            session(['token'=>$call['token']]);
        } else {
            //login to third party api failed,
            //so I need to redirect user back
            Log::info('failed login');
            return redirect()->back(); //send user back to login screen
        }
    }

似乎以下逻辑没有成功重定向,而是立即转到handle. RedirectIfAuthenticatedController我看到记录的“登录失败”消息,但它永远不会将我重定向回来或命中return redirect()->back()线路。

我觉得为这个逻辑设置一个中间件有点不必要。我试图找到 Laravel 内置的帮助方法,让我在authenticated被击中后调用,但我无法弄清楚。

我可以让它工作的唯一方法是 Auth::logout();else语句中添加。这是处理这种逻辑的正确方法吗?

标签: phplaravel

解决方案


推荐阅读