2016-01-08 4 views
0

J'utilise la nouvelle version de ember-simple-auth, qui n'ajoute plus automatiquement de jeton d'accès aux requêtes ajax envoyées au serveur. J'utilise l'authentification oauth2 et, en raison d'une mauvaise documentation, je n'arrive pas à comprendre comment et où ce serait la bonne façon de définir le jeton d'en-tête pour chaque requête ajax que je fais.Définition du jeton d'accès pour chaque requête ajax

Ce code doit-il être sous la fonction d'autorisation de l'autorisateur personnalisé ou ailleurs?

this.get('session').authorize('authorizer:some-authorizer', (headerName, headerValue) => { 
    xhr.setRequestHeader(headerName, headerValue); 
}); 

Toute information sur la mise en place correcte serait très appréciée!

Répondre

1

Vous pouvez le faire comme ceci:

let userToken; 
this.get('session').authorize('authorizer:some-authorizer', (headerName, headerValue) => { 
    userToken = headerValue; 
}); 

$.ajax({ 
    url: "Your Url", 
    // ... 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader('Authorization', userToken); 
    } 
}) 

Si vous ne voulez pas le faire à chaque demande, vous pouvez créer votre propre customAjaxCall quelque part et il suffit d'utiliser celle-là:

export default function customAjaxCall(session, url) { 
    let userToken; 
    session.authorize('authorizer:some-authorizer', (headerName, headerValue) => { 
     userToken = headerValue; 
    }); 

    return $.ajax({ 
     url: url, 
     dataType: 'json', 
     contentType: 'application/json; charset=UTF-8', 
     // ... 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader('Authorization', userToken); 
     } 
    }) 
} 
1

Nous utilisons un adaptateur personnalisé dans notre application l'adaptateur ressemble à ceci

import DS from "ember-data"; 
import Ember from "ember"; 
import App from '../app'; 

export 
default DS.RESTAdapter.extend({ 
    namespace: 'data', 
    host: App.hostUrl, 
    ajax: function (url, type, hash) { 
     hash = hash || {}; 
     hash.headers = hash.headers || {}; 
     hash.headers['Authorization'] = 'Token token=' + App.access_token; 
     hash.crossDomain = true; 
     return this._super(url, type, hash); 
    } 
}); 

Chaque autre adaptateur de modèle utilisé étend cet adaptateur par ex.

import ApplicationAdaper from './application'; 

export default ApplicationAdaper.extend({ 
    ... 
}); 

Pour référence et d'autres informations Vérifiez RESTAdapter tête Personnalisation http://emberjs.com/api/data/classes/DS.RESTAdapter.html

+0

agréable. comment utiliser l'appel ajax de cet adaptateur? – Aljaz

+0

L'en-tête spécifié est automatiquement ajouté à chaque appel ajax effectué par l'adaptateur de modèle donné –