1

我想分配一個用戶名,我得到錯誤。我遵循以下步驟。 服務器的詳細信息。調用setActiveUser拋出錯誤

<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的挑戰處理機

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"); 

我的Android顯示器上得到以下錯誤

。在Eclipse上

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 

上面提到的錯誤得到了解決,但新的userid沒有得到更新在mobilefirst控制檯。

你能幫我解決我犯的錯誤嗎?

+0

您是否解決了此錯誤? –

+0

通過採用MFP插件的最新更新解決了此問題。 – Bender

+0

記下這個問題的答案,說明你現在安裝的內部版本號? –

回答

0

正如評論中所述,通過從IBM Fix Central網站更新到最新的iFix發行版解決了此問題。