1

我正在发送一封包含邀请链接的电子邮件,但我在使用电子邮件中附加的链接时遇到问题,类似于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"});

}]);

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

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

4

1 回答 1

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;
[...]

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

于 2013-10-30T06:25:17.850 回答