2016-02-17 1 views
1

Мне нужна возможность получить имя пользователя userid/password пользователя в java-адаптере. После прочтения большого количества статей лучше всего позвонить по телефонуWL.Server.getActiveUser возвращает Null

WL.Server.getActiveUser из функции javascript, которая вызывается из java-адаптера. Итак, я добавил функцию http: getIdentity для http-адаптера, который аутентифицирует наше приложение. Я проверил, что getActiveUser работает в функции аутентификации, которую звонят на страницах входа ...

Когда я вызываю функцию getIdentity, getActiveUser возвращает значение null, используя ту же область аутентификации. Я установил область в файле application_descriptor. Не уверен, что еще мне нужно делать. Есть идеи?

function performAuthentication(username, password) { 
     WL.Logger.info("In performAuthentication: username = " + username + " password = " + password + "Time = " + new Date(new Date().getTime()).toLocaleString()); 

     var invocationData = { 
      adapter : 'BluePages', 
      procedure : 'authenticate', 
      parameters : [username, password] 
     }; 
     var invocationResult = WL.Server.invokeProcedure(invocationData); 

     var fullName = invocationResult.result.fullName; 
     if (invocationResult.result.success == false) { 
      return { 
       authRequired: true, 
       loginPassed: false 
      }; 
     } 
     else { 
      userIdentity = { 
       userId: username, 
       credentials: password, 
       displayName: username, 
       attributes: { 
        foo: "bar" 
       } 
     }; 

     WL.Server.setActiveUser("AuthRealm", null); 
     WL.Server.setActiveUser("AuthRealm", userIdentity); 
     var activeUser = WL.Server.getActiveUser("AuthRealm"); 
     WL.Logger.info("activeUser = " + activeUser); 

     if(activeUser && activeUser.userId == username){ 
      WL.Logger.info("Active userId = " + activeUser.userId + " password = " + activeUser.credentials); 
      WL.Logger.info("User has been logged in!"); 
      return { 
       loginPassed: true, 
       authRequired: false, 
       fullName: fullName, 
       result: invocationResult.result 
      }; 
     } 
     else { 
      WL.Logger.info("Else Clause..."); 
      if(activeUser != null) 
       WL.Server.setActiveUser("AuthRealm", null); 
      WL.Server.setActiveUser("AuthRealm", userIdentity); 
     } 


     return { 
      authRequired: false, 
      loginPassed: true, 
      fullName: fullName 
     }; 
    } 

} 


function getIdentity() { 
     WL.Logger.info("AuthAdapter: In getIdentity: Time = " + new Date(new Date().getTime()).toLocaleString()); 

     WL.Logger.info("AuthAdapter: userIdentity = " + userIdentity); 

     var activeUser = WL.Server.getActiveUser("AuthRealm"); 

     WL.Logger.info("AuthAdapter: getIdentity: getActiveUser returned = " + activeUser); 

     if (activeUser) { 

       WL.Logger.info("AuthAdapter: getIdentity userId = " + activeUser.userId); 

       return { 
        userId: activeUser.userId, 
        credentials: activeUser.credentials, 
     }; 
    } 
} 

ответ

5

Там может быть 2 причины, чтобы получить нуль при использовании WL.Server.getActiveUser:

1) Если нет область не определяется на адаптере, метод возвращает нуль (активный пользователь неизвестен)

2) Если на адаптере определено поле:

Если нет сильной идентификации, связанной с пользователем (пользователь был аутентифицирован в этом сеансе или в предыдущем сеансе), метод возвращает значение null.

В вашем случае вы сказали, что царство существует, поэтому я предлагаю попробовать # 2

Вы можете найти более подробную информацию здесь: https://www.ibm.com/support/knowledgecenter/SSZH4A_6.0.0/com.ibm.worklight.help.doc/apiref/r_method_wl_server_getactiveuser.html

Смежные вопросы