I have been playing with React/Flux, and I am having trouble wrapping my head around the \'Flux Way\' for handling permission-sensitive actions.
Overarching question: W
As FakeRainBrigand suggested in his answer, you'd want to just check that the user has a valid session before creating a comment by first retrieving that value from the SessionStore:
case CommentConstants.ADD_COMMENT:
if (SessionStore.getUser()) {
createComment(action.data);
}
break;
But to preserve the comment so that it gets created after the user logs in, I would create a collection of pending comments in the CommentStore, and then later, in a callback to the login verification and session creation, dispatch a new action to inform the CommentStore that the user has now logged in. Then the CommentStore can respond to that by creating real comments out of the pending ones.
It should be noted that there's an example called auth-flow in react-router repo, that shines light on how this could be done. Although, I'm still trying to make it work for me it is useful to add here.
The simplest would be just asking SessionStore if there's a session.
case CommentConstants.ADD_COMMENT:
if (SessionStore.getUser()) {
createComment(action.data);
}
break;
Of course, this just saves you a server request. The behavior shouldn't be any different than always calling createComment(action.data)
.
Is this a case where the payload should be passed into ensureCurrentUser, and then into the route handler for /login? What is the Flux way of handling these types of flows?
For this, you might want to have an event emitter that emits a 'login' event.
case CommentConstants.ADD_COMMENT:
if (SessionStore.getUser()) {
createComment(action.data);
}
else {
someEventEmitter.one('login', function(){
createComment(action.data);
});
someEventEmitter.emit('loginRequired');
}
break;
And when loginRequired is emitted, if there isn't a user logged in, the login view would be presented.