2016-03-16 4 views
2

J'ai brûlé un peu de temps à essayer de comprendre celui-ci.Ember Simple Auth: Comment définir/envoyer plusieurs en-têtes de requête?

Mon arrière-plan est Rails 4.x avec devise_token_auth

Pour autoriser une demande après la connexion, je dois envoyer plusieurs têtes à chaque demande, comme celui-ci (vérifié travailler avec boucle):

curl -X GET -H "Content-Type: application/vnd.api+json" -H "Access-Token: 33YPWz2Kr4eMimYjblDg7w" -H "Client: godv0EDuuc-2qZ6kvrVLzQ" -H "Token-Type: Bearer" -H "Accept: application/vnd.api+json" -H "Uid: [email protected]" -H "Expiry: 1459295877" -H "Provider: Email" "http://localhost:3000/api/v1/forms" 

Je suis complètement perdu quant à la façon dont l'api fonctionne réellement. Je ne vois pas comment je peux définir plus d'un en-tête de requête dans la méthode d'autorisation DeviseAuthorizer #.

Si quelqu'un sait comment faire cela et peut répondre à la question, j'ouvrirai immédiatement une demande d'extraction pour corriger la documentation d'Ember Simple Auth dans cette zone.

+0

J'espérais faire aussi bien. Je pense que la meilleure option est d'étendre BaseAuthorizer et de créer un nouveau DeviseTokenAuthorizer basé sur le code de DeviseAuthorizer mais avec plus de paramètres. – SacWebDeveloper

Répondre

2

L'auteur de l'option passe une fonction comme deuxième argument de #authorize.


http://ember-simple-auth.com/api/classes/BaseAuthorizer.html#method_authorize

authorize(data, block(headerName,headerContent)) 

Arguments

données

: Object Les données que la session détient actuellement

bloc (headerName, headerContent): Fonction Le rappel pour appeler à la données d'autorisation; recevra le nom d'en-tête et le contenu d'en-tête comme arguments


Si vous voulez ajouter vos propres en-têtes, vous pouvez créer votre classe approbateur allant de la approbateur concevoir. Ensuite, remplacer la méthode authorize comme ceci:

import Ember from 'ember'; 
import Devise from 'ember-simple-auth/authorizers/devise'; 

export default Devise.extend({ 
    authorize(data, header) { 
    this._super(data, header); 

    header('X-Custom-Header', "The custom 1 header"); 
    header('X-Other-Custom-Header', "The custom 2 header"); 
    } 
}); 

Cela fonctionne parce que l'adaptateur de données mixin, il passe cette fonction:

this.get('session').authorize(authorizer, (headerName, headerValue) => { 
    xhr.setRequestHeader(headerName, headerValue); 
}); 
+0

merci! l'un d'entre nous devrait ouvrir un PR pour l'ajouter aux docs authentiques. Quand je lisais les docs, le concept qui manquait était que vous pouviez appeler 'header' plusieurs fois –