2

ログインしたユーザー ID を変更しようとしていますが、

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. 

どうすればこれを変更できますか?

編集:

@Xv。その時、ユーザーのセッション オブジェクトにいくつかの値を保存する必要がありました。そのために、最初に上記のようにユーザーのオブジェクトを変更しようとしましたが、セッションオブジェクトの値を取得、変更、または追加するのに役立つ以下の API を見つけました。

WL 6.3 ドキュメント:

HttpServletRequest オブジェクトへのアクセス。

  • WL.Server.getClientRequest

これにより、 HttpServletRequestオブジェクトに直接アクセスできるようになり、JEE アプリケーションで行う場合と同様に、そのすべてのメソッドを使用できます。

例えば:

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

4

1 に答える 1

2
  1. API では常にレルム名を指定します。getActiveUserWL.Server.getActiveUser("myRealm")

  2. エラー メッセージが示すように、アクティブなユーザー ID を変更することはできません。変更することはできませ。あなたがする必要があるのは、最初に呼び出すことによって既存のユーザーIDを破棄WL.Server.setActiveUser("myRealm", null)してから呼び出すことですWL.Server.setActiveUser("myRealm", {...})

于 2013-06-10T06:54:54.513 に答える