在基于Laravel令牌的API中替代会话存储



我正在构建一个Electron应用程序,该应用程序连接到Laravel 8应用程序(使用Inertia使用Jetstream(和API。

我正在移植现有的Inertia Jetstream Vue组件,以复制实际web应用程序中出现的相同功能。

使用密码确认功能时,Laravel使用会话存储来存储确认密码的时间,然后再次检查确认密码的状态。

使用令牌身份验证时,没有会话。

我可以创建新的控制器来处理这个问题,但我如何替换对$request->session()的调用?

存储密码确认的代码如下所示:

public function store(Request $request)
{
$confirmed = app(ConfirmPassword::class)(
$this->guard, $request->user(), $request->input('password')
);
if ($confirmed) {
// here is the problem ... no session with tokens 
$request->session()->put('auth.password_confirmed_at', time());
}
return $confirmed
? app(PasswordConfirmedResponse::class)
: app(FailedPasswordConfirmationResponse::class);
}

存储此信息以便在后续调用中检索的最佳方式是什么?

我不完全确定,因为它是在移动设备上使用的,我对此没有任何经验。然而,在浏览器领域,您可以使用cookie并将令牌设置为httpOnly。我在nodeJ中有一个小例子,来自我的一个爱好项目:

const token = jwt.sign({ _id: currentUser._id }, process.env.JWT_SECRET, { expiresIn: '7d' });
currentUser.password = undefined;
res.cookie('token', token, {
httpOnly: true,
});

通过将cookie设置为HttpOnly,用户无法篡改它。由于它是移动的,如果它支持cookie,这就更不容易被攻击。罗德尼

最新更新