Ember.js - 如果已经在应用程序中则阻止转换,但如果着陆则重定向

Ember.js - Prevent transition if already in app, but redirect if landing

在Ember.js中,当您点击应用内的link时,您可以使用transition.abort()有条件地阻止转换到目标页面,例如:

  afterModel: function(model, transition) {
    if (!model.user.get('facebookAuthenticated')) {
      if (confirm("You have to log in with facebook. Continue?")) {
        this.controller.send('facebookLogin');
      }
      else {
        transition.abort();
      }
    }
  }

这将取消转换,您将停留在当前页面。

但是,如果您在应用程序中着陆到这条路线,例如通过遵循外部 URL 怎么办?然后默认行为是继续执行 transition.abort(),这会使您处于 空白页 。完全不能接受。

有没有办法检测用户是否在这条路线上着陆,以便应用程序可以重定向或其他什么?

您可以使用 beforeModel 挂钩来检查用户是否已通过身份验证。 我假设您有某种方式知道您的用户是否通过会话或 cookie 进行身份验证。

如果用户未通过身份验证,您可以立即重定向到另一个页面。

这可以通过阅读 transition.sequence 属性 并使用有条件的 redirect/abort 转换来完成。序列 属性 returns 自登陆 page/loading ember 应用以来当前转换的计数。

if (transition.sequence === 0) {
  // Land on page
  window.location.replace('http://a.url.com');
}
else {
  // Click link in app
  transition.abort()
}