如何在 Coldbox 应用程序中使用 Cbauth 存储、检索和更新会话用户数据?
How to I Store, Retrieve, and Update Session User Data Using Cbauth in a Coldbox App?
Cbauth 是 Coldbox 应用程序中常用的 Forgebox 模块,用于处理用户身份验证。
要检索当前登录用户的信息,您可以调用auth().getUser()
。此方法在应用程序定义的用户服务 class 中调用 retrieveUserById()
。在我的例子中,retrieveUserById()
进入数据库,检索用户数据,然后 returns 一个组装的 User
实体对象。
在我的项目中,我想在每个页面上显示当前登录用户的名字和头像。我想避免在每次页面请求时返回数据库,因为缓存至少一些用户数据(或者甚至可能是整个 User
实体)会更有效率。
在 Cbauth 中有没有一种方法可以在用户的会话范围内存储自定义数据,请求它,然后更新它(例如,如果用户在登录时更新他们的名字)
这是我到目前为止尝试过的方法:
根据文档,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;
}
此外,我看不到任何方法可以在存储会话数据后检索它。非常感谢任何帮助或指向已成功实施 Cbauth 的示例的指针!
您尝试引用的数据在 interceptData
结构中。任意拦截器的方法签名如下:
function interceptorName( required struct interceptData, required buffer, event, rc, prc );
因此您可以将 user
作为 arguments.interceptData.user
访问并使用 arguments.sessionStorage.setVar( "user", arguments.interceptData.user );
存储它(sessionStorage
不是 session
范围。它是提供的外观通过 cbstorages.
这是从上面修改而来的完整拦截器签名:
function postAuthentication( interceptData ) {
arguments.interceptData.sessionStorage.setVar(
"user",
arguments.interceptData.user
);
}
Cbauth 是 Coldbox 应用程序中常用的 Forgebox 模块,用于处理用户身份验证。
要检索当前登录用户的信息,您可以调用auth().getUser()
。此方法在应用程序定义的用户服务 class 中调用 retrieveUserById()
。在我的例子中,retrieveUserById()
进入数据库,检索用户数据,然后 returns 一个组装的 User
实体对象。
在我的项目中,我想在每个页面上显示当前登录用户的名字和头像。我想避免在每次页面请求时返回数据库,因为缓存至少一些用户数据(或者甚至可能是整个 User
实体)会更有效率。
在 Cbauth 中有没有一种方法可以在用户的会话范围内存储自定义数据,请求它,然后更新它(例如,如果用户在登录时更新他们的名字)
这是我到目前为止尝试过的方法:
根据文档,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;
}
此外,我看不到任何方法可以在存储会话数据后检索它。非常感谢任何帮助或指向已成功实施 Cbauth 的示例的指针!
您尝试引用的数据在 interceptData
结构中。任意拦截器的方法签名如下:
function interceptorName( required struct interceptData, required buffer, event, rc, prc );
因此您可以将 user
作为 arguments.interceptData.user
访问并使用 arguments.sessionStorage.setVar( "user", arguments.interceptData.user );
存储它(sessionStorage
不是 session
范围。它是提供的外观通过 cbstorages.
这是从上面修改而来的完整拦截器签名:
function postAuthentication( interceptData ) {
arguments.interceptData.sessionStorage.setVar(
"user",
arguments.interceptData.user
);
}