见 JSFiddle:http: //jsfiddle.net/cyclomarc/MHvrH/3/
有很多示例展示了如何在 Ember 中实现身份验证。为了保护对路由的访问,如果您没有有效的令牌,您将被重定向到登录页面。成功登录后(因此在获得有效令牌后),您将被重定向到最初请求的页面。
实现:在重定向到登录之前,将请求的转换存储在一个对象中;登录后,您读取对象属性并执行transition.retry。
login: function () {
var self = this;
App.Session.set('token', '1234567890');
var attemptedTransition = App.Session.get('attemptedTransition');
if (attemptedTransition) {
attemptedTransition.retry();
}
....
如果您通过根 URL 访问应用程序,这将很有效。您可以在 JSFiddle 中看到这一点。单击出版物以查看出版物列表。然后,如果您单击出版物以查看您必须登录的详细信息。单击登录(仅模拟成功登录),您将转换到“详细信息”路线。
但是,如果您直接访问“详细” URL (e.g. browse to http://yyy/index.html#/publications/1)
,则存储转换的 .retry 将失败。在那种情况下,ID(路由的参数)似乎丢失了。网址变为:http://yyy/index.html#/publications/undefined
...
这是一个已知问题吗?有解决方法吗?
更多信息:
如果您检查转换,则如果它不起作用,则不会设置 providedModelsArray。这与 Ember.data 有关吗?
正确的过渡(Ember.inspect(savedTransition)):
{router: [object Object], promise: [object Object],
data: [object Object], resolvedModels: [object Object],
providedModels: [object Object],
providedModelsArray: <App.Publication:ember330:2>,
sequence: 2, params: [object Object],
targetName: publications.show, isAborted: true}
不正确的过渡(Ember.inspect(savedTransition)):
{router: [object Object], promise: [object Object],
data: [object Object], resolvedModels: [object Object],
providedModels: [object Object],
providedModelsArray: ,
sequence: 1, params: [object Object],
targetName: publications.show,
urlMethod: null, isAborted: true}