2016-03-22 9 views
0

Ich habe versucht, Adapter-basierte Authentifizierung für eine Anwendung zu entwickeln, und ich bin mir nicht sicher, warum der Abfrage-Handler hier nicht ausgelöst wird.Die Herausforderung behandelt keine Herausforderung mit Adapter-basierter Authentifizierung

Clientseitige main.js:

var AuthenticationHandler = WL.Client.createChallengeHandler("EventAuthRealm"); 
 

 
AuthenticationHandler.isCustomResponse = function(response) { 
 
    if (!response || !response.responseJSON || response.responseText === null) { 
 
    return false; 
 
    } 
 
    if (typeof(response.responseJSON.authStatus) !== 'undefined') { 
 
    return true; 
 
    } else { 
 
    return false; 
 
    } 
 
}; 
 

 
AuthenticationHandler.handleChallenge = function(response) { 
 
    var authRequired = response.responseJSON.authRequired; 
 

 
    if (authRequired == false) { 
 

 
    WL.logger.debug("done"); 
 
    busyIndicator.hide(); 
 
    AuthenticationHandler.submitSuccess(); 
 
    toEventList(); //function to navigate to next page 
 

 

 
    } else if (authRequired == true) { 
 

 
    WL.logger.debug("false"); 
 
    busyIndicator.hide(); 
 
    AuthenticationHandler.submitFailure(); 
 
    WL.Logger.debug(response.responseJSON.errorMessage); 
 
    } 
 
};

Anmeldung Funktion:

function login() { 
 

 
    var reg = $("#attendeeId").val(); 
 
    var userpw = $("#attendeePw").val(); 
 

 
    busyIndicator.show(); 
 
    var invocationData = { 
 
    adapter: "eventdbAdapter", 
 
    procedure: "submitAuthentication", 
 
    parameters: [reg, userpw] 
 
    }; 
 

 
    AuthenticationHandler.submitAdapterAuthentication(invocationData, {}); 
 

 
};

HTML-Code der Login-Seite:

<div data-role="page" id="eventloginpage"> 
 
    <div data-role="header" align="center" data-theme="b">Event app</div> 
 

 
    <div data-role="content" style="padding: 15px" id="wat"> 
 
    <input type="text" name="attId" id="attendeeId" placeholder="Attendee ID"> 
 
    <input type="password" name="password" id="attendeePw" placeholder="Attendee Password"> 
 

 
    <!-- Buttons here --> 
 
    <a href="#" data-role="button" id="loginButton" data-theme="b" onclick="login();">Login</a> 
 
    <a href="#" data-role="button" id="button" onclick="logout();">Logout for now</a> 
 
    </div> 
 

 
    <div data-role="footer" align="center">Text</div> 
 
</div>

Wenn dies könnte verwandt sein, ich die Multipage-Komponente der Anwendung nach dem Tutorial aufgebaut, die pagecontainer Änderung verwendet.

Beispiel:

function toEventList() { 
 
    $(':mobile-pagecontainer').pagecontainer('change', 'eventpage.html'); 
 
}

Jedes Mal, wenn ich die Login-Funktion ausführen, alles funktioniert wie oben bestimmt, bis submitAdapterAuthentication genannt wird.

Google Dev-Konsole gibt ein Timeout für die Anforderung zurück. Beim Ausführen der App auf einem Android-Gerät zeigt Logcat einen Statuscode von 201 an. Ich kann nur annehmen, dass das Objekt erfolgreich mit den Informationen erstellt wurde, die aus den Feldern gesammelt wurden. Der Handler übermittelt die Anmeldeinformationen jedoch überhaupt nicht.

Jede Art von Beratung würde sehr geschätzt werden. Ich entschuldige mich im Voraus, wenn mein Beitrag albern erscheint, da ich mit MobileFirst und Web-Technologien im Allgemeinen nicht sehr erfahren bin.

+0

Statuscode von 201 bedeutet. Das Entitätsformat wird durch den Medientyp angegeben, der im Headerfeld Inhaltstyp angegeben ist. Der Ursprungsserver MUSS die Ressource erstellen, bevor er den 201-Statuscode zurückgibt.Auf der anderen Seite. Der Statuscode 201 zeigt an, dass eine Anfrage erfolgreich war und als Ergebnis wurde eine Ressource erstellt (z. B. eine neue Seite). –

+0

so teilen Sie bitte Ihren Adapter-Code .oder fließende Dokumentation https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-1/foundation/all-tutorials/ –

+0

Vielen Dank für Ihre Antwort Hasan. Ich habe den Code für die JS- und XML-Dateien des Adapters unter folgendem Link hinzugefügt: https://jsfiddle.net/srvc0pk7/ – Willarch

Antwort

0

Ich habe herausgefunden, warum es vorher nicht richtig funktioniert hat. Auf der Seite des Adapters habe ich keine strengen Gleichheitsoperatoren für die Testanmeldungswerte in submitAuthentication() verwendet, wie im Beispiel gezeigt. Ich nahm an, dass die anderen Arten von Gleichheitsoperatoren funktionieren würden, dies scheint jedoch nicht der Fall zu sein. Soweit ich es beurteilen konnte, ist dies in keiner Dokumentation dokumentiert.

Der 401-Fehler, den ich zuvor erwähnt habe, scheint eine Überprüfung zu sein, die vom MobileFirst-Server anhand einer der eingebauten Komponenten gemäß der Dokumentation durchgeführt wurde.

Ich habe auch dafür gesorgt, den Server zu säubern und die Anwendung erneut darauf zu implementieren.

0

Es wäre hilfreich zu wissen, mit welcher Version des MFP Sie arbeiten, so dass Sie sich die entsprechende Dokumentation ansehen können.

Bitte stellen Sie sicher, dass das Folgende in der wlCommonInit() implementiert ist. Wie man hier vom-Dokumentation über sehen können, Documentation wird es brauchen die Arbeitsscheinwerfer Server

WL.Client.connect ( { onSuccess: onConnectSuccess, onFailure: onConnectFailure }) kontaktieren;

+0

Vielen Dank, dass Sie auf dieses Problem hingewiesen haben, und entschuldigen Sie, dass wir es am Anfang nicht aufgenommen haben. Ich verwende MFP 7.1.0. Ich habe tatsächlich connect() von wlCOmmonInit() vermisst. Keine Änderungen mit der Browser-Konsole. Auf meinem Android-Gerät erhalte ich FWLSE0335E: Autorisierung fehlgeschlagen Die Client-ID wurde nicht auf dem Server gefunden. – Willarch

+0

löschen Sie bitte den Cookie-Cache für den Webbrowser, schließen Sie ihn und versuchen Sie es erneut – Spindoctor

+0

Immer noch das Gleiche. Ich habe das als mögliche Lösung mehrmals beim Suchen bemerkt, aber es schien nicht zu funktionieren. – Willarch