Ember-获取转换的目标url
Ember - get target url of transition
如果不允许您查看某些内容(换句话说,如果服务器返回401),我将在Ember.js应用程序中创建一个错误挂钩,将您重定向到身份验证服务。
它看起来像这样:
Ember.Route = Ember.Route.extend({
error: function(error, transition){
if (error.status === 401) {
window.location.replace("https://auth.censored.co.za");
}
}
我们的auth-api的工作原理如下:如果你向它发送一个名为target
的参数(这是一个url),它会在你登录后将你重定向回目标url
所以我想以某种方式获得Ember应用程序试图转换到的路线的URL。
然后我的代码会变成这样的
Ember.Route = Ember.Route.extend({
error: function(error, transition){
if (error.status === 401) {
var target = // Your answer here
window.location.replace("https://auth.censored.co.za?target=" + encodeURIComponent(target));
}
}
我也遇到了对此的需求,并使用了一些内部API。在我的情况下,我想重新加载整个应用程序,这样,如果你切换用户,就不会有其他用户留下的数据。当我重新加载应用程序时,我想把用户放在他们试图转换到的URL上,但他们没有足够的权限。在他们进行身份验证(从而在本地存储中拥有承载令牌)之后,我想使用window.location.replace(url)
在Ember Transition
对象所暗示的URL处与用户一起获得整个应用程序的干净副本。但问题是,如何从Transition
对象转到URL?这是我的解决方案,它使用generate
方法,这是路由器的私有API:
let paramsCount = 0;
let params = {};
let args = [transition.targetName];
// Iterate over route segments
for (let key1 in transition.params) {
if (transition.params.hasOwnProperty(key1)) {
let segment = transition.params[key1];
// Iterate over the params for the route segment.
for (let key2 in segment) {
if (segment.hasOwnProperty(key2)) {
if (segment[key2] != null) {
params[key2] = segment[key2];
paramsCount++;
}
}
}
}
}
if (paramsCount > 0) {
args.push(params);
}
let url = router.generate.apply(router, args);
你需要通过容器查找或其他方式获得路由器。我通过注入-routing
服务获得了它,该服务被记录为API,将来可能会公开(由link-to
使用),并且恰好将路由器作为属性。
虽然很乱,但也许你会觉得这很有帮助。
我能够使用transition.intent.url
来实现这一点。我不确定这是否是私人的——相关讨论:https://discuss.emberjs.com/t/getting-url-from-ember-router-transition-for-sso-login/7079/2.
花了几个小时寻找这个问题的答案,并使用Chrome调试器尝试对Ember 2.5代码进行反向工程,我的结论是,目前您所寻找的是不可能的。
对于那些不明白为什么有人想这样做的人来说,当身份验证(例如登录页面)与应用程序分离时,就会出现这种情况。如果要求在用户未通过身份验证的情况下不向用户传递任何内容(包括应用程序本身),则这是必要的。换句话说,登录页面不能成为应用程序的一部分,因为用户在登录之前不允许访问应用程序
PS:我意识到这不是用户问题的解决方案,可能更适合作为评论。但是,我不能发表评论。
Kevins的答案是最正确的,我得出了类似的解决方案。基本上,我发现了link-to
组件是如何填充href
属性的,并使用了相同类型的代码。
在对象中注入-routing
。我用
'routing': Ember.inject.service('-routing'),
然后,从转换生成URL的代码如下。。。
let routing = this.get('routing');
let params = Object.values(transition.params).filter(param => {
return Object.values(param).length;
});
let url = routing.generateURL(transition.targetName, params, transition.queryParams);
- 更改跳转到URL操作SSRS 2008 R2的链接目标属性(rc:LinkTarget)
- 获取主机 URL + 目标 URL 的时间
- 删除浏览器底部链接的目标Url's页
- 如何在 Javascript onbeforeunload 事件中获取网页上链接的目标 URL
- 更改基于目标将 URL 参数追加到链接的方式
- 使用 Javascript 捕获值输入字段并将其放在目标 URL 中
- DOJO JsonRest - 在单击后无法更改目标 URL
- 在onclick处理程序中修改目标url
- 删除/避免将目标链接添加到URL
- WebBrowserControl在同一帧上加载目标URL
- cron作业中的Wget和Curl没有在目标URL中执行javascript
- dojo rest目标远程url
- 使用javascript将表单输入值插入href目标URL
- 如何使用get方法获取表单的完整目标url
- 浏览器如何显示链接的目标url
- Javascript窗口.打开在新窗口和同一窗口中打开目标URL
- 动态设置可编辑的目标URL
- Ajax请求成功,但无论如何都会继续到目标url
- Ember-获取转换的目标url
- 外部目标 (URL) 并展开面板/手风琴 Boostrap.不工作