【发布时间】:2013-02-08 01:48:18
【问题描述】:
我的应用有 2 个页面:main.html 和 login.html。
当未通过身份验证的用户转到/main 时,他们应该被重定向到/login。
问题是先渲染main.html,等一秒左右,当用户认证失败时,渲染login.html。
如何防止 main.html 在身份验证成功之前呈现?
这里是相关代码(CoffeeScript):
angular.module('myApp', [...])
.config(['$routeProvider', ($routeProvider) ->
$routeProvider.when '/login',
templateUrl: 'html/login.html'
controller: LoginController
$routeProvider.otherwise
templateUrl: 'html/main.html'
controller: MainController
])
.run(['$rootScope', '$location', 'appService', ($rootScope, $location, app) ->
$rootScope.$on '$locationChangeStart', (event, newValue, oldValue) ->
return if newValue == '/login'
$.when(app.authenticate()).fail ->
$location.path '/login'
$rootScope.$apply()
])
angular.module('myApp.services').factory 'appService' , () ->
rootRef = new Firebase('https://myapp.firebaseio.com')
user: null
authenticate: ->
deferred = $.Deferred()
authClient = new FirebaseAuthClient rootRef, (error, user) =>
if error
# An error occurred while attempting login
@user = null
deferred.reject()
else if user
# User authenticated with Firebase
@user = user
deferred.resolve()
else
# User is logged out
@user = null
deferred.reject()
deferred.promise()
【问题讨论】:
-
米莎,我的答案似乎不是你想要的。您能澄清一下您要完成的工作吗?
标签: angularjs firebase firebase-security angularjs-routing angularjs-authentication