【问题标题】:How get token from ember-simple-auth-token to use with Websocket?如何从 ember-simple-auth-token 获取令牌以与 Websocket 一起使用?
【发布时间】:2017-05-01 17:56:46
【问题描述】:

在下面的实现中,我尝试从ember-simple-auth-token 获取令牌并与用于连接ActionCable 的URL 一起使用:

...

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);
  }),

  ...
});

这仅在第一次请求时有效。我需要将其存储在 cookie 中吗?谢谢。

【问题讨论】:

    标签: ember.js ember-simple-auth


    【解决方案1】:

    以下代码解决了我的问题:

    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', {});
          });
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多