1

Ich habe Web-Anwendung auf Drupal 7 basiert, und ich möchte erstellen ionische App mit dieser Web-App mit REST verbunden.Drupal REST Return 301 nach dem Einloggen von ionischen Anwendung

Login Aktion funktioniert gut, aber nach dem Login bekomme ich immer Status 301 Moved Permamently, egal was ich von REST aufrufen.

Aber wenn ich das gleiche mit ARC oder POSTMASTER mache, funktioniert alles gut. Ich kann mich erfolgreich anmelden, Token erfolgreich erhalten und mich ohne Probleme abmelden.

Ich denke, der Grund ist Header nicht richtig eingestellt. Wenn ich ARC oder POSTMASTER verwende, enthält meine Anfrage Cookie mit session_name und sessid, die während der Anmeldung von drupal erhalten wurden.
Auch ich kann X-CSRF-Token in Header nicht setzen.
Aber wenn ich versuche, es auf eckigen zu setzen, ändert sich nichts auf Anfrage [Header werden nicht gesetzt].

Mein Login-Controller auf ionische (eckig):

var login = function(name, pw) {  
    return $q(function(resolve, reject) { 

     var data = "username="+name+"&password="+pw; 
     var config = { 
      headers : { 
       'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' 
      } 
     } 

     $http.post('http://example.com/user/login.json', data, config) 
      .then(
       function(response){ 
       // success callback 
       storeUserCredentials(name + '.' + response.data.token, response.data.session_name, response.data.sessid); 
       storeUserRole(response.data.user.roles); 

       resolve('Login success.'); 
       }, 
       function(response){ 
        // failure callback 
        //console.log('error '+response); 
        reject('Login Failed.'); 
       } 
     ); 

    }); 
}; 

Mein Logout-Controller auf ionische (eckig):

var logout = function() { 

    var data = "username="+name+"&password="+pw; 
    var config = { 
     headers : { 
      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 
      'X-CSRF-Token': token, 
      'Cookie':session_name + '=' + sessid 
     } 
    } 

    $http.post('http://example.com/user/logout.json', data, config) 
     .then(
      function(response){ 
       // success callback 
       destroyUserCredentials(); 
      }, 
      function(response){ 
       // failure callback 
       destroyUserCredentials(); 
     } 
    ); 
}; 

Antwort

0

Diese Technik funktioniert für mich

Ich speichere die 'minimales' Konfigurationsobjekt als Startpunkt. Diese Aufgabe wird mit der Antwort erstellt von /services/session/token als data im Folgenden:

localStorageService.set('HTTP_CONFIG', { 
    headers: { 
     'Content-type': 'application/json', 
     'Accept': 'application/json', 
     'X-CSRF-Token': data 
    } 
}); 

Im Gegensatz zu vielen Beispielen online, ich finde es nicht notwendig, manuell die Cookies zu setzen. Der Versuch, Cookies zu setzen, führt oft zu Fehlern. In diesem Beispiel verwende ich lokalen Speicher, um Kopien der HTTP-Konfiguration zu erstellen.


Als nächstes stelle ich fest, ob ich eingeloggt bin oder nicht.

var tokenConfig = localStorageService.get('HTTP_CONFIG'); 
tokenConfig.url = APP_CONFIG.REST_API + '/system/connect.json'; 
tokenConfig.method = 'POST'; 
tokenConfig.data = {}; 
$http(tokenConfig) ... 

trage ich einfach nach vorne auf diese Weise zum Beispiel:

var loginConfig = localStorageService.get('HTTP_CONFIG'); 
loginConfig.method = 'POST'; 
loginConfig.url = APP_CONFIG.REST_API + '/user/login'; 
loginConfig.data = { username: username, password: password }; 
$http(loginConfig) ... 

ich einfach nach vorne die gleiche 'minimal' http Config-Objekt tragen, das Hinzufügen Eigenschaften nach Bedarf. Das hat perfekt für mich funktioniert.

Verwandte Themen