1) You could use the redirect or afterModel route hook to abort a transition.
App.LoginRoute = Ember.Route.extend({
redirect: function(model, transition) {
if ( transition ) {
var infos = transition.router.currentHandlerInfos;
if (infos) {
var lastRouteName = infos[infos.length-1].name;
if (lastRouteName === 'home') {
transition.abort();
}
}
}
}
});
2) When you abort a transition triggered by the browser back button, the URL get out of sync until the next successful transition.