如何在Coldbox应用程序中使用Cbauth来存储,检索和更新会话用户数据?

问题描述 投票:0回答:1

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的示例的帮助或指针,将不胜感激!

coldfusion cfml coldbox
1个回答
0
投票

您要引用的数据在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.提供的外观。>

© www.soinside.com 2019 - 2024. All rights reserved.