2016-10-09 2 views
0

J'essaye de faire l'autorisation dans mon application de braise.Ember simple auth n'envoie pas d'en-tête auth à api

Son travail sur le côté client, mais braise ne joint pas de jeton de support à la demande api.

Mon adaptateur

`import DS from 'ember-data'; 
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin'; 

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, { 
    host: 'http://localhost/money-app-api/web/app_dev.php/api', 
    authorizer: 'authorizer:application' 
}); 

Mon approbateur:

`import Ember from 'ember'; 
import OAuth2Bearer from 'ember-simple-auth/authorizers/oauth2-bearer'; 
const { isEmpty } = Ember; 

export default OAuth2Bearer.extend({ 
authorize(data, block) { 
const accessToken = data['access_token']; 
if (!isEmpty(accessToken)) { 
    block('Authorization', `Bearer ${accessToken}`); 
}` 

accessToken dans approbateur est existe et est correcte. Mon api est correcte aussi, je l'ai testé par Postman.

+0

Veuillez décrire votre question dans le titre. –

Répondre

1

Je vous écris un tutoriel complet s'il vous plaît suivez cet espoir que cela fonctionne pour vous.

//folders and files tree 
    adapters 
    --- application.js 
    authenticators 
    --- oauth2.js 
    authorizers 
    ---- oauth2-bearer.js 

Adaptateurs/application.js

import DS from 'ember-data'; 
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin'; 

export default DS.JSONAPIAdapter.extend(DataAdapterMixin,{ 
    authorizer: 'authorizer:oauth2-bearer', 
    host: 'http://localhost/money-app-api/web/app_dev.php', 
    namespace: 'api' 
}); 

authentificateurs/oauth2.js

import OAuth2PasswordGrant from 'ember-simple-auth/authenticators/oauth2-password-grant'; 

export default OAuth2PasswordGrant.extend({ 
    serverTokenEndpoint: 'http://localhost/money-app-api/web/app_dev.php/token' 
}); 

approbateurs/OAuth2-bearer.js

export { default } from 'ember-simple-auth/authorizers/oauth2-bearer'; 

donc maintenant dans votre itinéraire , application.js, vous êtes capable pour utiliser le code suivant: ceci est juste pour le but de démonstration que vous devez modifier selon vos besoins. Je suis en train d'écrire une authentification dans route/application.js pour clarifier davantage. J'écris une authentification dans route/application.js Dans cet exemple, j'obtiens des informations sur le compte et l'utilisateur en fonction de la session qui a déjà été authentifiée.

import Ember from 'ember'; 
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; 
import config from '../config/environment'; 

export default Ember.Route.extend(ApplicationRouteMixin, { 

    model() { 
    return Ember.RSVP.hash({ 
     account: new Ember.RSVP.Promise((resolve, reject) => { 

     if (!this.get('session.isAuthenticated')) { 
      resolve({}); 
      return; 
     } 

     let store = this.store, 
      session = this.get('session'); 

     let headers = {}; 

     this.get('session').authorize('authorizer:oauth2-bearer', (headerName, headerValue) => { 
      headers[headerName] = headerValue; 
     }); 

     return Ember.$.ajax(config.apiUrl + '/api/account', { 
      headers: headers 
     }).then(data => { 
      if (data) { 
      store.pushPayload(data); 
      resolve(store.peekRecord('user', data.data.id)); 
      } else { 
      reject({}); 
      session.invalidate(); 
      } 
     }).fail(() => { 
      session.invalidate(); 
     }); 
     }) 
    }); 
    }, 
    sessionAuthenticated() { 
    this.refresh(); 
    this._super(); 
    } 
}); 

J'espère que cela peut résoudre votre problème.

un conseil important:

The REST adapter allows your store to communicate with an HTTP server by 
    transmitting JSON via XHR. Most Ember.js apps that consume a JSON API 
    should use the REST adapter. 
    ### Headers customization 
    Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary 
    headers can be set as key/value pairs on the `RESTAdapter`'s `headers` 
    object and Ember Data will send them along with each ajax request. 
    ```app/adapters/application.js 
    import DS from 'ember-data'; 
    export default DS.RESTAdapter.extend({ 
    headers: { 
     "API_KEY": "secret key", 
     "ANOTHER_HEADER": "Some header value" 
    } 
    }); 
    ``` 
    `headers` can also be used as a computed property to support dynamic 
    headers. In the example below, the `session` object has been 
    injected into an adapter by Ember's container. 
    ```app/adapters/application.js 
    import DS from 'ember-data'; 
    export default DS.RESTAdapter.extend({ 
    headers: Ember.computed('session.authToken', function() { 
     return { 
     "API_KEY": this.get("session.authToken"), 
     "ANOTHER_HEADER": "Some header value" 
     }; 
    }) 
    }); 
    ``` 

Source

+0

Je l'ai déjà et ça marche pour moi. Mais mon problème est que ember ne joint pas l'en-tête à l'adaptateur json –

+0

Je viens d'ajouter une astuce pour l'envoi des en-têtes dans l'adaptateur, cela devrait aider votre problème. Essaie . – Majid

0

Mon seul problème était que je n'ai pas authorization dans mes têtes d'acceptation dans api

allow_headers: ['origin', 'X-Custom-Auth', 'Content-Type', 'Authorization']

C'est étrange, parce que quand testé par Postman tout fonctionnait.