2016-06-03 14 views
0

so habe ich einen selbst geschriebenen PHP-Web-Service für eine App.PHP/JS Login-System

Jetzt möchte ich das gleiche mit dem Web tun. Aber ich kämpfe mit dem Login.

Ich muss 2 Funktionen des Web-Service aufrufen. Eine, um ein Login-Token zu erhalten, ein anderes, um dies zu überprüfen und ein Zugriffs-Token anzufordern.

So nenne ich sie mit javascript:

<?php 
     if(isset($_POST['email']) && isset($_POST['password'])) 
     { 
?> 
      <script> 
       var xhttp = new XMLHttpRequest(); 
       xhttp.open("POST", "http://webservice.com/requestLoginToken", false); 
       xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
       xhttp.send(<?php echo "'email=" . urlencode($_POST['email']) . "'"?>); 
       if(xhttp.status == 401) 
        document.getElementById("message").innerHTML = xhttp.responseText; 
       else 
       { 
        var loginToken = xhttp.responseText; 
        var pwHash = loginToken + <?php echo "'" . sha1($_POST['password']) . "'" ?>; 
        pwHash = sha1(pwHash); 
        xhttp = new XMLHttpRequest(); 
        xhttp.open("POST", "http://webservice.com/authenticate", false); 
        xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
        xhttp.send("loginToken=" + loginToken + "&publicHash=" + pwHash); 
        if(!xhttp.status == 200) 
         document.getElementById("message").innerHTML = xhttp.responseText; 
        else 
        { 
         var accesstoken = xhttp.responseText; 
        } 
       } 
      </script> 
    <?php 
     } 
    ?> 

So jetzt habe ich das Zugriffstoken haben. Aber wie kann ich das jetzt als Session-Variable von $ _SESSION einstellen?

Oder was ist der beste Weg, um dieses Access Token während des Aufenthalts zu speichern?

Ich brauche dieses Token, wenn ich die API aufrufen.

+1

Wenn Sie das Token erhalten, senden Sie es über einen Ajax-Aufruf an Ihren PHP-Code. Achten Sie jedoch darauf, wie Sie es tun, da dies ein Sicherheitsrisiko darstellen kann, wenn Sie es falsch machen. Auf der anderen Seite, wenn es in Ihrer Anwendung nicht unbedingt notwendig ist, es mit Javascript zu tun, schlage ich vor, dass Sie den gesamten Anmeldeprozess mit PHP durchführen, zum Beispiel mit curl. – dlopez

+0

CURL war der Trick, den ich gesucht habe! Funktioniert jetzt. Vielen Dank! – errorcode

Antwort

1

Keine direkte Antwort auf Ihre Frage, aber Sie sollten auf jeden Fall in Betracht ziehen, ein geeignetes Framework oder eine Bibliothek zu verwenden, auch für etwas so kleines. Code Igniter soweit ich mich erinnere, ist es einfach, mit zu beginnen. Die Zeile urlencode($_POST['email']) ist zum Beispiel ein großes Sicherheitsproblem, das XSS-Angriffe erlaubt.

Nun zurück zu Ihrer Frage. Was Sie brauchen, ist ein Session-Cookie zu setzen, dann kümmert sich der Browser darum. Das Setzen eines Cookies von JS wird als schlechte Praxis angesehen (da es die Verwendung von HttpOnly Cookies verhindert, ein empfohlenes Sicherheitskennzeichen), wäre es am einfachsten, wenn der Server, der den AJAX-Anmeldeanruf entgegennimmt, einen Cookie auf die Antwort setzt.
Dieser Cookie wird für alle nachfolgenden Aufrufe an denselben Server ausgegeben. Wenn Sie ein geeignetes Framework verwenden, werden alle Authentifizierungsdaten für Sie verwendet.

+0

Hey, danke für deine Vorschläge. Ja, es wäre viel besser, das zu tun. Ich werde das in der nächsten Zeit tun. – errorcode