在Laravel 8.x中进行用户认证但不保持登录状态



当测试我的应用程序,并试图创建一个新的用户,然后在表单提交我得到错误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_DRIVERSESSION_DRIVER,但我开始失去生活的意志,所以不知道我是否在做正确的事情-请帮助,如果你可以!!

编辑以添加更多细节:

dashboard路由的中间件:

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

如果我删除中间件,那么我只是得到一个错误,usernull上的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匹配。

这是这个问题的正确答案。它被版主删除了。版主,在你删除这个答案之前,你能解释一下为什么吗?

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

如果我能知道为什么它被删除,我就能明白如何避免在未来做出同样会被删除的答案。谢谢你。

相关内容

  • 没有找到相关文章

最新更新