在AngularJS中,在控制器之间共享数据,并添加用于身份验证的回调行为
In AngularJS, share data between controllers and add callback behavior for authentication
我目前正在开发Angular前端,试图通过使用breeze或restangular来避免事情过于复杂,但仍然可以正确地编码。问题是,只写了几行代码后,我的代码似乎变得比其他任何东西都臃肿。
关键是将用户保存在cookie中,并在有人登录时返回。
身份验证服务
var userResource=$resource('/users/:id');var currentUser=$cookieStore.get("user")||{};返回{currentUser:currentUser,login:函数(userId,type,callback){var thiz=这个;return userResource.save({id:userId},{},function(promise){promise.then(函数(结果){thiz.currentUser=结果数据;$cookieStore.put("用户",thiz.currentUser);if(回调){callback(thiz.currentUser);}});});},用户:函数(){return userResource.query();}};
AuthCtrl控制器
$scope.login=函数(userId,类型){Auth.login(用户ID、类型、函数(结果){$scope.user=结果;});};Auth.login("someuser"、"basic"、函数(结果){$scope.user=结果;});$scope.users=Auth.users();
在另一个控制器中:
$scope.user=Auth.currentUser;Snippets.query({user:$scope.user.id},函数(Snippets){$scope.snippets=片段;});
我之所以解决服务中的承诺,是因为我想保存currentUser并将其放入cookieStore(可能在手机上不可用,但无论如何)。
问题是,通过这样做,我返回的不是promise,而是资源,这迫使我在所有登录调用中传递回调。
有更好的方法吗?
您可以将资源包装在promise中,并返回promise。这应该有效:
var userResource = $resource('/users/:id');
var currentUser = $cookieStore.get("user") || {};
return {
currentUser: currentUser,
login: function(userId, type, $q) {
var self = this;
var deferred = $q.defer();
// return currentUser if it is present.
if (this.currentUser.id) {
return $q.when(this.currentUser);
}
userResource.save({id: userId}, {}, function(response) {
if (!response.error) {
self.currentUser = response.data;
$cookieStore.put("user", self.currentUser);
deferred.resolve(self.currentUser);
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
},
users: function() {
return userResource.query();
}
};
相关文章:
- Sencha Touch和远程服务器上的身份验证
- Javascript清除缓存以清除基本身份验证凭据
- REST的面向公众的身份验证机制
- 当需要身份验证时,ui路由器不会重定向
- 使用Facebook登录,但仍然可以获得:“;此标识池不支持未经身份验证的访问“;
- AJAX HTTP基本身份验证解决方案
- javascript api,用于在第三方域上存储身份验证令牌
- 安全地实现用于Facebook身份验证的Javascript SDK
- 如何使用 window.open 创建一个不确定延迟的弹出窗口(用于社交身份验证),而弹出窗口阻止程序会阻止它
- 适用于 Javascript 函数的应用程序范围的身份验证处理程序
- 是否建议将 angularjs 用于基于身份验证的大规模应用程序
- o身份验证 2 用于授权和自动登录
- 在AngularJS中,在控制器之间共享数据,并添加用于身份验证的回调行为
- 使用您网站的摘要's用于CSRF的身份验证cookie
- 在Node JS中用于身份验证的护照
- 对 php 服务的经过身份验证的 AJAX 请求(适用于 Wordpress)
- 我正在使用 auth0 进行用户身份验证,并且我有一个用于 CRUD 帖子(标题、图像、描述)的 API.如何对 CRU
- 适用于 Angular.js 应用程序的身份验证 API
- d3.json()支持身份验证吗?如果没有,还有哪些其他JavaScript选项可用于JSON检索
- HTTP基本身份验证适用于jQueryPOST请求,但不适用于Angular