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 콘솔에서 업데이트지고 있지 않습니다.
내가 실수를하고있는 곳에서 나를 도울 수 있습니까?
이 오류를 해결 했습니까? –
이 문제는 MFP 플러그인의 최신 업데이트를 적용하여 해결되었습니다. – Bender
지금 설치 한 빌드 번호를 설명하는 질문에 대한 답변으로 작성 하시겠습니까? –