0

在测试我的应用程序并尝试创建新用户时,在提交表单时出现错误 419。

如果我使用帮助程序Auth::loginUsingId(x)为现有用户登录,dd(auth()->user())则成功,但是当我重定向到另一个页面时,用户不再登录。例如,运行以下代码,您最终会被重定向到/login

Route::get('/logInAs/{id}', function ($id) {
    Auth::loginUsingId((int) $id);
    dd(\auth()->user());
    return redirect()->route('dashboard');
});

我会分享更多代码,但我不确定此时会有什么用处?

到目前为止,我可能已经花了大约七个小时试图解决这个问题。它把我逼上墙了!

该应用程序在其他环境中运行良好,例如staging. 我什至甚至从 github 重新下载它作为全新安装(以防我在vendor目录中搞乱并更改了某些内容),但这并没有解决它。

我在 Chrome 上遇到了同样的问题,在 Chrome 上使用不同的登录用户,在 Chrome 上使用隐身模式,使用 Firefox,以及valet share在另一台设备(如手机)上使用和访问我的本地版本,所以我不认为这样做带有浏览器缓存。

当其他从事该项目的开发人员在他们的机器上本地运行它时,我没有收到有关此问题的报告,所以它似乎只是我的本地环境。

我已经尝试过各种改变并且CACHE_DRIVER没有快乐,但我开始失去生活的意愿,所以我真的不知道我在那里做的事情是否正确 - 如果可以,请帮助!SESSION_DRIVER.env

编辑以添加更多细节:

dashboard路由中间件:

Route::middleware(['auth:sanctum', 'verified'])->group(function(){
    Route::get('/dashboard', DashboardController::class)->name('dashboard');
});

如果我删除中间件,那么我只会收到一个错误,user即仍然没有保持登录状态。nulldashboard.blade.phpuser

自定义中间件:

class VerifyUserIsMerchant
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->user()->isMerchant()) {
            return $next($request);
        }

        throw new AccessDeniedHttpException('You must be a merchant to access this page');
    }
}

如果我dd($request->user())在这个中间件中返回null.

4

1 回答 1

0

在 Laracasts 的帮助下,这个问题得到了解决。完整的答案在这里。

简而言之,我需要从in 中删除http://协议并将其设置为 match 。SESSION_DOMAIN.envAPP_URL

这是此问题的正确答案。已被版主删除。版主,在您删除此答案之前,请您解释一下原因吗?

它提供了问题中提出的问题的完整答案。我在其他任何地方都没有找到这个问题的答案(因此我花了几天的调试时间来修复)。

如果我能知道它被删除的原因,那么我就可以理解如何避免将来做出同样会被删除的答案。谢谢你。

于 2021-09-09T10:09:24.710 回答