1

ユーザーにユーザーIDを割り当てようとしていますが、エラーが表示されます。私は以下の手順に従っています。 サーバーの詳細。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"/> 

アンドロイドコード:

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の挑戦ハンドラ活動1でIntally

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

    } 

} 

私は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 

上記のエラーが解決しましたが、新しいユーザーIDをmobilefirstコンソールで更新取得されません。

私が間違っているところで助けてもらえますか?

+0

このエラーは解決しましたか? –

+0

この問題はMFPプラグインの最新のアップデートを適用することで解決しました。 – Bender

+0

質問に答えてこれを書いて、インストールしたビルド番号を教えてください。 –

答えて

0

コメントに記載されているとおり、この問題は、IBM Fix Central Webサイトから最新のiFixリリースに更新することで解決しました。

関連する問題