当测试我的应用程序,并试图创建一个新的用户,然后在表单提交我得到错误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');
});
我想分享更多的代码,但我不确定在这一点上什么是有用的?
到目前为止,我可能已经花了大约7个小时来修复这个问题。它快把我逼疯了!该应用程序在其他环境下运行良好,例如staging
。我甚至已经走了这么远,重新下载它从github作为一个新的安装(以防我在vendor
目录搞砸了,改变了一些东西),但这并没有解决它。
我在Chrome上遇到同样的问题,在Chrome上使用不同的登录用户,在Chrome上使用隐身模式,使用Firefox,并使用valet share
并在另一个设备(如手机)上访问我的本地版本,所以我认为这与浏览器缓存无关。
当其他开发人员在他们的机器上本地运行项目时,我没有收到这个问题的报告,所以似乎只有我的本地环境。
我曾多次尝试改变.env
中的CACHE_DRIVER
和SESSION_DRIVER
,但我开始失去生活的意志,所以不知道我是否在做正确的事情-请帮助,如果你可以!!
编辑以添加更多细节:
dashboard
路由的中间件:
Route::middleware(['auth:sanctum', 'verified'])->group(function(){
Route::get('/dashboard', DashboardController::class)->name('dashboard');
});
如果我删除中间件,那么我只是得到一个错误,user
是null
上的dashboard.blade.php
,即user
仍然没有保持登录。
自定义中间件:
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
。
这个问题在laracast的帮助下得到了修复。完整答案在这里。
简而言之,我需要从
.env
中的SESSION_DOMAIN
中删除http://
协议,并将其设置为与APP_URL
匹配。
这是这个问题的正确答案。它被版主删除了。版主,在你删除这个答案之前,你能解释一下为什么吗?
它提供了问题中提出的问题的完整答案。我没有在其他任何地方找到这个问题的答案(因此为什么我花了几天的调试来修复)。
如果我能知道为什么它被删除,我就能明白如何避免在未来做出同样会被删除的答案。谢谢你。