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