2017-05-01 5 views
0

Dans ma mise en œuvre ci-dessous j'essaie obtenir le jeton de ember-simple-auth-token et à utiliser avec une URL, utilisée pour se connecter avec ActionCable:Comment obtenir un jeton à partir de ember-simple-auth-token à utiliser avec Websocket?

... 

export default Route.extend({ 
    store: service(), 
    currentUser: service(), 
    session: service(), 
    cable: service(), 

    setupConsumer: on('init', function() { 
    let token = this.get('session.data.authenticated.jwt'); 
    let consumer = this.get('cable') 
     .createConsumer(`wss://api.${config.APP.host}/cable?token=${token}`); 

    let channelMixin = Mixin.create({ 
     received(data) { 
     this.get('store').pushPayload(data); 
     } 
    }); 

    consumer.subscriptions.create({ 
     channel: 'ChatroomsChannel' 
    }, channelMixin); 
    }), 

    ... 
}); 

Cela ne fonctionne que à la première demande. J'ai besoin de stocker cela dans un cookie? Merci.

Répondre

1

Le code de suivi permet de résoudre mon problème:

import Route from 'ember-route'; 
import service from 'ember-service/inject'; 
import Mixin from 'ember-metal/mixin'; 
import config from 'apollo-enterprise/config/environment'; 

export default Route.extend({ 
    session: service(), 
    cable: service(), 

    afterModel(model) { 
    this.get('session.store').restore().then((data) => { 
     let token = data.authenticated.jwt; 
     let consumer = this.get('cable') 
     .createConsumer(`wss://api.${config.APP.host}/cable?token=${token}`); 

     let channelMixin = Mixin.create({ 
     store: service(), 

     received(data) { 
      this.get('store').pushPayload(data); 
     } 
     }); 

     consumer.subscriptions.create({ 
     channel: 'MessagesChannel', 
     chatroom_id: model.id 
     }, channelMixin); 
    }); 
    }, 

    setupController(controller) { 
    this._super(...arguments); 

    controller.set('message', {}); 
    }, 

    actions: { 
    sendMessage(params) { 
     let chatroom = this.controller.get('model'); 
     let message = this.get('store').createRecord('message', params); 

     message.set('chatroom', chatroom); 
     message.save().then(() => { 
     this.controller.set('message', {}); 
     }); 
    } 
    } 
});