React / Flux способ обработки чувствительных к разрешению действий с потоками входа

Я играл с React / Flux, и у меня возникли проблемы, когда я оборачиваюсь вокруг «Пути Flux» для выполнения действий, чувствительных к разрешению.

Общий вопрос: когда не вошедший в систему посетитель пытается выполнить действие, которое требует, чтобы он / она вошел в систему, каков способ Flux (а) проверить, вошел ли пользователь в систему, (б) запустить поток входа в систему, (с ) завершить акцию на успех?

Возьмите пример приложения на форуме, которое требует, чтобы пользователи вошли в систему, чтобы оставлять сообщения:

У нас есть компонент формы комментария (в основном взятый из React tut FB) как таковой:

var CommentForm = React.createClass({
  handleSubmit: function ( e ) {
    e.preventDefault();

    // get data
    commentData = {
      content: this.refs.content.getDOMNode().value.trim()
    };

    this.props.onCommentSubmit( commentData );
    this.resetForm();
  },

  resetForm: function () {
    this.refs.content.getDOMNode().value = '';
  },

  render: function () {
    return (
      <form className="comment-form" id="comment-form" onSubmit={ this.handleSubmit }>
        <textarea name="comment[content]" placeholder="What's on your mind?" ref="content"></textarea>
        <button className="post-comment button" type="submit">Post</button>  
      </form>
    )
  }
});

Магазин комментариев (сокращенно)

var CHANGE_EVENT = 'change';
var _comments = {};

function createComment ( data ) {
  // post to server
}

var CommentStore = React.addons.update(EventEmitter.prototype, {$merge: {

  // omitted methods

  dispatcherIndex: AppDispatcher.register(function(payload) {
    var action = payload.action;
    var text;

    switch(action.actionType) {
      case CommentConstants.ADD_COMMENT:
        AppDispatcher.waitFor([SessionStore.dispatchToken])
        createComment(action.data);
        break;
    }

    return true;
  })
}});

И магазин для обработки сессий (также сокращенно):

var CHANGE_EVENT = 'change';

function ensureCurrentUser () {
  if ( !SessionStore.currentUser() ) {
    app.router.navigate('/login');
  }
}

var SessionStore = React.addons.update(EventEmitter.prototype, {$merge: {

  // omitted code

  currentUser: function () {
    return app.context.current_user;
  },

  dispatchToken: AppDispatcher.register(function ( payload ) {
    var action = payload.action;

    switch(action.actionType) {
      case CommentConstants.ADD_COMMENT:
        ensureCurrentUser();
        break;
    }

    return true;
  })
}});

Моей первоначальной мыслью было, что это дело Флукса.waitFor() метод. Однако реализация выше не дает результатов, так какwaitFor закрывает цикл зависимости, как толькоSessionStore.dispatchToken устанавливается (как толькоensureCurrentUser возвращается).

Это тот случай, когда полезная нагрузка должна быть передана вensureCurrentUser, а затем в обработчик маршрута для/login? Как Flux обрабатывает эти типы потоков?

Заранее спасибо :)

Ответы на вопрос(3)

Ваш ответ на вопрос