2016-03-22 3 views
0

Je travaille actuellement sur une application Ember 2.4.x et j'utilise ember-simple-auth avec un authentificateur personnalisé et un autorisateur personnalisé.Ember simple auth et en-têtes de cookie

Une fois l'authentification réussie, le serveur répond avec un corps JSON contenant des informations sur l'utilisateur actuel plus un cookie dans les têtes de réponse:

Response Headers: 
    Set-Cookie:Authorization=1s39gpzqy4d0w1quxekavz6yj1;Path=/ 

Maintenant, la seule chose que je dois, pour chaque demande consécutives, est renvoyer ce même cookie. Je comprends qu'avec ember-simple-auth, je peux utiliser le rappel block afin de définir un en-tête supplémentaire dans mon autorisateur personnalisé. Cependant, je ne pouvais pas trouver un moyen de renvoyer exactement le même cookie avec chaque demande.

Aussi je me demande si j'ai besoin d'un autorisateur du tout puisque je ne mets aucun en-tête, le serveur se soucie seulement de ce cookie.

Répondre

0

Si votre serveur d'authentification émet un cookie, vous n'avez pas vraiment besoin d'un autorisateur car les navigateurs enverront automatiquement le cookie à chaque requête consécutive.

+0

Merci pour cette réponse, je me suis débarrassé de l'autorisateur pour le moment même si je prévois de tirer du code de l'authorizer mixin afin que l'application routera automatiquement au cas où le serveur envoie un 401. Malheureusement, je suis toujours hors de avec cette chose de cookie. Il semble que le navigateur ou Ember ne renvoie pas le cookie au serveur. Y a-t-il quelque chose que je devrais faire du tout? – makabde

0

J'ai finalement réussi à faire fonctionner cela. Fondamentalement, j'ai suivi la réponse de that topic

Puis, dans mon authentificateur personnalisé Je réutilisant la méthode makeRequest sur laquelle je devais régler la xhrFields propriété:

makeRequest(data, options) { 
    let serverTokenEndpoint = get(this, 'serverTokenEndpoint'); 
    let requestOptions = $.extend({ 
    url:  serverTokenEndpoint, 
    type:  'POST', 
    // The contentType must be passed to Jetty as it will default to 
    // 'application/x-www-form-urlencoded' 
    contentType: 'application/json', 
    crossDomain: true, 
    dataType: 'json', 
    data, 
    xhrFields: { 
     withCredentials: true 
    }, 

    beforeSend(xhr, settings) { 
     xhr.setRequestHeader('Accept', settings.accepts.json); 
    } 
    }, options || {}); 

    return $.ajax(requestOptions); 
} 

J'ai aussi découvert que le serveur a dû mettre Access-Control-Allow-Credentials:true dans le Response Headers sinon Ember serait par une erreur.