gpt4 book ai didi

coldfusion - 如何在 Coldbox 应用程序中使用 Cbauth 存储、检索和更新 session 用户数据?

转载 作者:行者123 更新时间:2023-12-03 12:52:38 25 4
gpt4 key购买 nike

Cbauth是 Coldbox 应用程序中常用的 Forgebox 模块,用于处理用户身份验证。

要检索有关当前登录用户的信息,您可以调用 auth().getUser()。此方法调用应用程序定义的用户服务类中的 retrieveUserById()。在我的例子中,retrieveUserById() 进入数据库,检索用户数据,然后返回一个组装的 User 实体对象。

在我的项目中,我想在每个页面上显示当前登录用户的名字和头像。我想避免在每次页面请求时返回数据库,因为缓存至少一些用户数据(或者甚至可能是整个 User 实体)会更有效率。

在 Cbauth 中有没有一种方法可以在用户的​​ session 范围内存储自定义数据,请求它,然后更新它(例如,如果用户在登录时更新他们的名字)

这是我到目前为止尝试过的:

根据文档,Cbauth 有一个名为 postAuthentication 的拦截器,它确实将 sessionStorage 作为参数传递。我相信我可以利用它来为当前用户存储额外的数据。但是,当我尝试在拦截器中引用 user 时,我收到了 Element USER is undefined in ARGUMENTS 错误消息。

// After a user authenticates, store the user entity in the session (does not work)
function postAuthentication( user, sessionStorage, requestStorage ) {
arguments.sessionStorage.user = arguments.user;
}

此外,我看不到任何方法可以在存储后检索缓存的 session 数据。非常感谢任何帮助或指向成功实现 Cbauth 的示例的指针!

最佳答案

您尝试引用的数据位于 interceptData 结构中。任意拦截器的方法签名如下:

function interceptorName( required struct interceptData, required buffer, event, rc, prc );

因此,您将以 arguments.interceptData.user 的形式访问 user 并使用 arguments.sessionStorage.setVar( "user", arguments.interceptData.user 存储它); (sessionStorage 不是 session 范围。它是由 cbstorages. 提供的外观

这是从上面修改的完整拦截器签名:

function postAuthentication( interceptData ) {
arguments.interceptData.sessionStorage.setVar(
"user",
arguments.interceptData.user
);
}

关于coldfusion - 如何在 Coldbox 应用程序中使用 Cbauth 存储、检索和更新 session 用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57897412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com