Session Worklight:WL.Server.setActiveUser-Can';t modify-非法状态:无法更改标识

Session Worklight:WL.Server.setActiveUser-Can';t modify-非法状态:无法更改标识,session,ibm-mobilefirst,adapter,Session,Ibm Mobilefirst,Adapter,我正在尝试修改已登录的用户标识 var mydata="this is custom data array"; var user = JSON.parse(JSON.stringify(WL.Server.getActiveUser())); WL.Logger.debug("Before Update" + user.attributes); WL.Logger.debug(" displayName =" + user.displayName )

我正在尝试修改已登录的用户标识

var mydata="this is custom data array";

var user = JSON.parse(JSON.stringify(WL.Server.getActiveUser()));
           WL.Logger.debug("Before Update" + user.attributes);
           WL.Logger.debug(" displayName =" + user.displayName );
           WL.Logger.debug("isUserAuthenticated ="+ user.isUserAuthenticated );
           WL.Logger.debug("userId =" + user.userId );

          WL.Server.setActiveUser ("myAppRealm" ,{    userId: user.userId ,
               displayName: user.displayName,
               isUserAuthenticated: user.isUserAuthenticated,
               attributes: {  userdata: mydata   }
           } );
           WL.Logger.debug(" ---- Updateed user ---- "  );
           var user = JSON.parse(JSON.stringify(WL.Server.getActiveUser())); 
但其给出了以下例外情况

response [/apps/services/api/myApp/common/query] success: /*-secure-
{"isSuccessful":false,"warnings":[],"errors":["Illegal State: Cannot change identity of an already logged in user in realm 'myAppRealm'. The application must logout first."],"responseID":"67","info":[]}*/ worklight.js:1097
Procedure invocation error. Illegal State: Cannot change identity of an already logged in user in realm 'myAppRealm'. The application must logout first. 
我如何修改这个

编辑:

@十五,。那个时候,我需要在用户的会话对象中保存一些值。为此,我首先尝试如上所述修改用户的对象,但后来发现下面提到的API有助于在会话对象中检索、修改或添加值

WL 6.3文档:

访问HttpServletRequest对象

  • WL.Server.getClientRequest
这使您可以直接访问HttpServletRequest对象,然后可以像在JEE应用程序中一样使用它的所有方法

例如:

WL.Server.getClientRequest().getSession().getAttribute(“mykey”) WL.Server.getClientRequest().getSession().setAttribute(“mykey”,myobj)

  • 始终
    getActiveUser
    API中提供一个领域名称,例如
    WL.Server.getActiveUser(“myRealm”)

  • 正如错误消息所说,您不能更改活动用户标识,它是不可更改的。您需要做的是首先通过调用
    WL.Server.setActiveUser(“myRealm”,null)
    处理现有用户标识,然后调用
    WL.Server.setActiveUser(“myRealm”,null)


  • 是的,我首先调用WL.Server.getActiveUser(“myRealm”),然后调用WL.Server.setActiveUser。但我没有尝试先处理/删除现有用户标识,然后再重新设置。但我找到了另一个解决方法,对我来说很好,它使用这种语法直接保存在HTTPSession中。(var obj=WL.Server.getClientRequest().getSession().getAttribute(“mykey”)和WL.Server.getClientRequest().getSession().setAttribute(“mykey”,myobj))在适配器中声明了它。Thanks@AAhad,请接受这个答案,或者写下你自己的答案并接受。如果你能在安东的答案的评论中添加一个答案和你描述的解决方法,那就太好了:这将允许更新它并使链接更容易。