如何使用VALID路径自动停止角度重定向到默认页面(使用其他方法定义)

时间:2013-10-25 10:50:11

标签: angularjs angularfire angular-routing

我正在发送一封包含邀请链接的电子邮件,但我在电子邮件中附带的链接有问题myapp.com/#/invitation/J5QSXr9/token/J6ixelV3。当我点击它时,它会自动重定向到我的默认页面myapp.com/#/login,这是不受欢迎的。真正奇怪的是,当我点击浏览器时,它正确显示了网页。我在路由提供商中定义的是:

var myApp = angular.module('myApp', ["firebase"]).config(

['$routeProvider',
    function($routeProvider){
        $routeProvider.when('/login', {templateUrl:'partials/login.html', controller:'LoginCtrl'});
        $routeProvider.when('/todos', {templateUrl:'partials/todos-list.html', controller:'TodosListCtrl', authRequired:true, pathTo: '/todos'});
        $routeProvider.when('/todos/:todosId', {templateUrl:'partials/todos-detail.html', controller:'TodoCtrl', authRequired:true});
        $routeProvider.when('/invitation/:todosId/token/:tokenNum', {templateUrl:'partials/invitation.html', controller:'InvitationCtrl', authRequired:false});
        $routeProvider.otherwise({redirectTo:'/login'});
    }]
)

// establish authentication
.run(['angularFireAuth', '$rootScope', function(angularFireAuth, $rootScope) {
  var url="https://myapp.firebaseio.com/";
  angularFireAuth.initialize(url, {scope: $rootScope, name: "user", path:"/login"});

}]);

您会注意到我正在使用角度$routeProvider执行此操作,并且我还在使用Firebase和angularFire,并且为了进行身份验证我正在使用angularFireAuth({{ 3}})。因此,/invitation/:todosId/token/:tokenNum的路由不应该要求身份验证,请注意我设置authRequired:false以便任何人都可以访问它,但它会不断重定向到/login。看起来很奇怪的是浏览器历史记录显示了页面,所以当我点击浏览器时页面显示并正常工作。

为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

我已经这样解决了。在angularFire.js文件调用new FirebaseSimpleLogin时(在第440行左右),我注意到它在加载页面后没有有效登录时调用self._loggedOut(),所以我决定(* * 任意 **)仅在需要重定向时调用此项,因此添加了条件if ($route.current.authRequired),结果如下:

[...]
var client = new FirebaseSimpleLogin(this._ref, function(err, user) {
  self._cb(err, user);
  if (err) {
    $rootScope.$broadcast("angularFireAuth:error", err);
  } else if (user) {
    self._loggedIn(user)
  } else {
    if ($route.current.authRequired)
      self._loggedOut();
  }
});
this._authClient = client;
[...]

希望有人可以更好地解释为什么需要这样做......