1

userid를 할당하려고하는데 오류가 발생했습니다. 아래의 단계를 따르고 있습니다. 서버 세부 정보.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(); 
    } 

} 

}

안드로이드 도전 처리기

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

하지만 내 응용 프로그램 충돌 모바일 최초의 플랫폼 장치에

MFPInitializer mfpInitializer = MFPInitializer.getInstance()을 SETUSER하기 위해 로그인을 제출하려고 할 때;

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 웹 사이트에서 사용 가능한 최신 iFix 릴리스로이 문제점을 해결했습니다.

관련 문제