【发布时间】:2015-03-16 10:10:58
【问题描述】:
我对 Angular 很陌生,所以这可能是一个新手问题。
我正在尝试实现一个简单的任务管理器(只是一个练习),其中 Rails 作为后端,Angular 作为前端。到目前为止,我遵循了一个教程,一切正常。
现在我想全局实现身份验证。这意味着:当用户没有注册和登录时,她应该看到一个启动页面或登录页面。
我不想在每个 Angular 控制器中都这样做,因为 DRY。所以我认为 UI 路由器可能是一个好地方。而且我有点怀疑 $httpProvider.interceptors 可能有用。
这就是我得到的。我可以检查用户是否经过身份验证并阻止页面加载。但仅此而已。我将如何离开这里?有没有我错过的好教程?
Stackoverflow 上的This question 也朝着类似的方向发展,但并没有解决我的问题,因为他们没有使用 Devise。
谢谢!
// app.js
var app = angular.module("TaskManager", ['ui.router', 'templates', 'Devise'])
.config([
'$stateProvider',
'$urlRouterProvider',
function($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'home/_home.html',
controller: 'MainCtrl',
resolve: {
projectPromise: ['projects', function(projects) {
console.log($rootScope);
return projects.getAll();
}]
}
})
.state('projects', {
url: '/projects/{id}',
templateUrl: 'projects/_projects.html',
controller: 'ProjectsCtrl',
resolve: {
project: ['$stateParams', 'projects', function($stateParams, projects) {
return projects.get($stateParams.id);
}]
}
})
.state('login', {
url: '/login',
templateUrl: 'auth/_login.html',
controller: 'AuthCtrl',
onEnter: ['$state', 'Auth', function($state, Auth) {
Auth.currentUser().then(function() {
$state.go('home');
})
}]
})
.state('register', {
url: '/register',
templateUrl: 'auth/_register.html',
controller: 'AuthCtrl',
onEnter: ['$state', 'Auth', function($state, Auth) {
Auth.currentUser().then(function() {
$state.go('home');
})
}]
});
$urlRouterProvider.otherwise('home');
}
]);
// run blocks
app.run(function($rootScope, Auth) {
// you can inject any instance here
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
if(!Auth.isAuthenticated()) {
// So the magic should probably happen here. But how do I implement this?
// And how do I allow users to access the /login and /register page?
event.preventDefault();
}
})
});
【问题讨论】:
-
您提到的问题不包括设计为身份验证机制。
标签: javascript ruby-on-rails angularjs devise angular-ui-router