我正在发送一封包含邀请链接的电子邮件,但我在电子邮件中附带的链接有问题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
。看起来很奇怪的是浏览器历史记录显示了页面,所以当我点击浏览器时页面显示并正常工作。
为什么会发生这种情况的任何想法?
答案 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;
[...]
希望有人可以更好地解释为什么需要这样做......