【发布时间】:2014-09-07 18:26:34
【问题描述】:
我正在开发的应用程序包含各种状态(使用 ui-router),其中一些状态需要您登录,其他状态是公开可用的。
我创建了一个有效检查用户是否登录的方法,我目前遇到的问题实际上是在必要时重定向到我们的登录页面。需要注意的是,登录页面当前并未放置在 AngularJS 应用程序中。
app.run(function ($rootScope, $location, $window) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (toState.data.loginReq && !$rootScope.me.loggedIn) {
var landingUrl = $window.location.host + "/login";
console.log(landingUrl);
$window.open(landingUrl, "_self");
}
});
});
console.log 正确显示了预期的 url。在那之后的那一行,我几乎尝试了从 $window.open 到 window.location.href 的所有内容,无论我尝试了什么,都不会发生重定向。
编辑(已解决):
发现问题。
var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");
变量landingUrl 被设置为'domain.com/login',它不能与 $window.location.href (这是我尝试过的事情之一)。但是将代码更改为
var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
现在可以了。
【问题讨论】:
-
应该补充一下,数据也有服务器端认证,所以上面不是唯一的认证,更多的是方便重定向到登录页面,而不是显示一个几乎是空的页面。
-
你需要使用
$window.location=...的原生location对象 -
相反,您可以考虑将其全部设为 AngularJS,包括您的身份验证 - 请参阅此帖子 frederiknakstad.com/2013/01/21/…
-
计划最终将所有内容(包括登录)包含在 AngularJS 应用程序中,但由于我们目前正在过渡到 AngularJS,因此注册/登录屏幕似乎在这个阶段最不重要。
标签: javascript angularjs redirect angular-ui-router