情况
我使用yeoman生成器angularjs搭建了应用程序,从而为我提供了一个干净的目录结构和框架结构。我只是在学习angularjs,使用yeoman是一种更干净的做事方式,soc已经取得了很大的成就。
现在我遇到了一个问题,不知道该把东西放在哪里,比如服务和工厂,我现在正在处理用户身份验证。
基本上
到目前为止,我有两个路由,一个是/,一个是/secured。我对此进行了设置,以便可以真正开始使用身份验证。
我找到了这篇关于authenticating a user的文章。我发现它真的很有趣,我认为我可以以某种方式理解它,我真的理解了它,但我认为我无法理解应该如何使用工厂和服务的一些基础知识。
我目前所拥有的
首先,我没有后端服务,因为应用程序失败了,现在不需要写服务,我可以只写一个简单的php脚本,返回401状态或200,但现在没有必要,我想先在客户端工作。
在app.coffee文件中
angular.module('myApp', [
'ngCookies',
'ngResource',
'ngSanitize',
'ngRoute'
])
.config ($routeProvider) ->
$routeProvider
.when '/',
templateUrl: 'views/home.html'
controller: 'HomeCtrl'
.when '/secured',
templateUrl: 'views/secured.html'
controller: 'SecuredCtrl'
resolve:
loggedin: checkLoggedin // this is the wrong one
.otherwise
redirectTo: '/'
.config ($httpProvider) ->
$httpProvider.interceptors.push('httpInterceptor')在文章中,他说创建一个检查用户是否登录的函数,在他的codebase中,他在config方法中创建了这个函数。顺便说一句,他没有使用约曼,所以对我来说事情变得很复杂。
我认为检查登录状态是一个工厂或服务的工作,所以我想写一个这样的因子
angular.module('myApp')
.factory 'checkLoggedin', ($q, $timeout, $http, $location, $rootScope) ->
deferred = $q.defer()
$http.get('api/loggedin').success (user) ->
if user isnt '0'
$timeout(deferred.resolve, 0)
else
$rootScope.message = 'You need to be logged in.'
$timeout(
() -> deferred.reject(),
0
)
$location.url '/login'这样做的正确方法是什么?
发布于 2014-02-24 15:24:51
您可以使用非常棒的angular-http-auth模块- https://github.com/witoldsz/angular-http-auth
您所需要做的就是在应用程序控制器级别侦听事件“auth-loginRequired”,然后显示登录屏幕。
我所做的(不是最好的方法)是在我的应用程序控制器中监听这个事件,并重定向到登录路由-
$scope.$on('event:auth-loginRequired', function() {
$location.path('/login');
});https://stackoverflow.com/questions/21981165
复制相似问题