Cbauth是在Coldbox应用程序中通常用于处理用户身份验证的Forgebox模块。
要检索有关当前登录用户的信息,您可以致电auth().getUser()
。此方法在应用程序定义的用户服务类中调用retrieveUserById()
。就我而言,retrieveUserById()
进入数据库,检索用户数据,然后返回一个组合的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.提供的外观。>