1

Я пытаюсь назначить пользователя пользователю, и я получаю ошибку. Я следую ниже. информация о сервере.Вызов setActiveUser throws error

<realm loginModule="AuthLoginModule" name="AuthRealm"> 
     <className>com.worklight.integration.auth.AdapterAuthenticator</className> 
     <parameter name="login-function" value="AuthAdapter.onAuthRequired"/> 
     <parameter name="logout-function" value="AuthAdapter.onLogout"/> 
    </realm> 
</realms> 


     <loginModule name="AuthLoginModule"> 
     <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className> 
    </loginModule> 



    <customSecurityTest name="AuthSecurityTest"> 
     <test isInternalUserID="true" realm="AuthRealm"/> 
    </customSecurityTest> 

адаптер

function onAuthRequired(headers, errorMessage){ 
    errorMessage = errorMessage ? errorMessage : null; 

    return { 
     authStatus: "credentialsRequired", 
     errorMessage: errorMessage 
    }; 
} 

function submitAuthentication(username, password){ 
// if (username==="user" && password === "password"){ 

     var userIdentity = { 
       userId: username, 
       displayName: username, 
       attributes: { 
        foo: "bar" 
       } 
     }; 

     WL.Server.setActiveUser("AuthRealm", userIdentity); 

     return { 
      authStatus: "complete" 
     }; 
// } 

// return onAuthRequired(null, "Invalid login credentials"); 
} 

function getSecretData(){ 
    return { 
     secretData: "Very very very very secret data" 
    }; 
} 

function onLogout(){ 
    WL.Logger.debug("Logged out"); 
} 

Адаптер XML

<procedure name="submitAuthentication" securityTest="wl_unprotected" /> 
<procedure name="getSecretData" securityTest="AuthSecurityTest"/> 

Android код:

public class MFPInitializer { 

Context mContext; 
public AndroidChallengeHandler challengeHandler; 
private String realm = "AuthRealm"; 
WLClient client = null; 

private static MFPInitializer mfpInitializer = new MFPInitializer(); 

/* A private Constructor prevents any other 
    * class from instantiating. 
    */ 
private MFPInitializer() { 
} 

/* Static 'instance' method */ 
public static MFPInitializer getInstance() { 
    return mfpInitializer; 
} 

void mfpConnector(WLClient client) { 

    challengeHandler = new AndroidChallengeHandler(realm); 
    client.registerChallengeHandler(challengeHandler); 

    client.connect(new WLResponseListener() { 
     @Override 
     public void onSuccess(WLResponse wlResponse) { 
      Log.d("Success--- MFP_connect", wlResponse.getResponseText()); 

     } 

     @Override 
     public void onFailure(WLFailResponse wlFailResponse) { 
      Log.d("fail-- MFP_connect", wlFailResponse.getErrorMsg()); 
     } 
    }); 
} 

public void logout() { 
    if (client != null) { 
     client.logout(realm, new WLRequestListener() { 
      @Override 
      public void onSuccess(WLResponse wlResponse) { 

      } 

      @Override 
      public void onFailure(WLFailResponse wlFailResponse) { 

      } 
     }); 
    } 

} 

public WLClient mfpInit(Context context) { 
    mContext = context; 

    try { 
     client = WLClient.createInstance(context); 
     if (client != null) { 
      mfpConnector(client); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return client; 
} 

public static void registerUser() { 

    try { 
     URI adapterPath = new URI("/adapters/AuthAdapter/getSecretData"); 

     WLResourceRequest request = new WLResourceRequest(adapterPath, WLResourceRequest.GET); 

     request.setQueryParameter("params", "[]"); 
     request.send(new WLResponseListener() { 
      @Override 
      public void onSuccess(WLResponse wlResponse) { 
       Log.d("onsuccess--------", wlResponse.getResponseText()); 
      } 

      @Override 
      public void onFailure(WLFailResponse wlFailResponse) { 
       Log.d("onfail--------", wlFailResponse.getErrorMsg()); 
      } 
     }); 

    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 

} 

}

Android вызова Handler

public class AndroidChallengeHandler extends ChallengeHandler { 
// private Activity parentActivity; 
    private WLResponse cachedResponse; 


    public AndroidChallengeHandler(String realm) { 
     super(realm); 
//  parentActivity = activity; 
    } 

    @Override 
    public void onFailure(WLFailResponse response) { 
     try { 
      submitFailure(response); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onSuccess(WLResponse response) { 
     submitSuccess(response); 
    } 

    @Override 
    public boolean isCustomResponse(WLResponse response) { 
     try { 
      if(response!= null && 
        response.getResponseJSON()!=null && 
        !response.getResponseJSON().isNull("authStatus") && 
        response.getResponseJSON().getString("authStatus") != ""){ 
       return true; 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 

    @Override 
    public void handleChallenge(WLResponse response){ 
     cachedResponse = response; 
     Log.d("handleChallenge: ---- ",response.getResponseText()); 
     try { 
      if(response.getResponseJSON().getString("authStatus").equals("credentialsRequired")){ 
//    MainAdapterBasedAuth.setMainText("handleChallenge->credentialsRequired"); 
//    Intent login = new Intent(parentActivity, LoginAdapterBasedAuth.class); 
//    parentActivity.startActivityForResult(login, 1); 
      } 
      else if(response.getResponseJSON().getString("authStatus").equals("complete")){ 
       Log.d("handleChallenge: ---- ",response.getResponseText()); 
       submitSuccess(cachedResponse); 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void submitLogin(String userName, String password){ 

     Object[] parameters = new Object[]{userName, password}; 
     WLProcedureInvocationData invocationData = new WLProcedureInvocationData("AuthAdapter", "submitAuthentication"); 
     invocationData.setParameters(parameters); 
     WLRequestOptions options = new WLRequestOptions(); 
     options.setTimeout(30000); 
     submitAdapterAuthentication(invocationData, options); 

    } 

} 

Intally активность 1 Я зову, который будет инициализировать wlclient и добавив область.

MFPInitializer.getInstance().mfpInit(getApplicationContext()); 

Но когда я пытаюсь отправить логин, чтобы SETUSER к устройству в мобильных первых платформах моего приложение падает

MFPInitializer mfpInitializer = MFPInitializer.getInstance();

mfpInitializer.challengeHandler.submitLogin("user","Passcode"); 

Я получаю следующие ошибки

на андроид монитора.

ava.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.worklight.wlclient.WLRequest.shouldFailOnChallengeCancel()' on a null object reference 

на затмение (MFP)

An error occurred while invoking procedure [project _MFP]AuthAdapter/submitAuthenticationFWLSE0100E: parameters: [project _MFP] 
Cannot change identity of an already logged in user in realm 'AuthRealm'. The application must logout first. 
FWLSE0101E: Caused by: [pro 

Вышеуказанная ошибка вышла решена, но новый идентификатор пользователя не получает обновленный В mobilefirst консоли.

Не могли бы вы помочь мне, где я совершаю ошибку.

+0

Вы решили эту ошибку, изгиб? –

+0

Эта проблема была решена с помощью последнего обновления плагина MFP. – Bender

+0

Помните, что это ответ на вопрос, указав номер сборки, который вы сейчас установили? –

ответ

0

Как упоминалось в комментариях, эта проблема была решена путем обновления до последней доступной версии iFix с веб-сайта IBM Fix Central.