Ruby on rails AngularJs登录用户权限 背景
我正在开发一个应用程序,根据用户是否登录,在页面上显示不同的内容。(使用ng if)我不希望根据登录状态将用户重定向到单独的路由。 我确实检查了服务器验证,以确保只有真正登录的用户才能修改,但我希望阻止非用户查看某些内容。我不确定最好的方法是什么。现在我确信这是不好的Ruby on rails AngularJs登录用户权限 背景,ruby-on-rails,angularjs,user-interface,ruby-on-rails-4,Ruby On Rails,Angularjs,User Interface,Ruby On Rails 4,我正在开发一个应用程序,根据用户是否登录,在页面上显示不同的内容。(使用ng if)我不希望根据登录状态将用户重定向到单独的路由。 我确实检查了服务器验证,以确保只有真正登录的用户才能修改,但我希望阻止非用户查看某些内容。我不确定最好的方法是什么。现在我确信这是不好的 安格拉斯 轨道4 在我的静态页面html.erb文件中 问题: 这样做的正确(“安全”)方式是什么 用户访问控制(身份验证)始终是服务器端事务。换句话说,您的服务器应该始终对每个请求执行身份验证检查,而不是客户端。在客户端,
- 安格拉斯
- 轨道4
$scope.loggedIn
的想法是正确的。您肯定需要一种方法来知道用户是否已通过身份验证
但是,您不应该执行window.loggedIn
,因为任何人都可以更改窗口对象的状态。它不一定不安全,但绝对不是一个好的解决方案。一般来说,避免使用全局变量
以下是我推荐的一种体系结构:
- 与身份验证服务器通信的身份验证服务
- 表示用户会话的会话工厂。您可能希望它保存用户ID或其他内容。如果缺少ID,则用户未通过身份验证
- 顶级作用域对象(可能是$rootScope?或只是顶级控制器作用域?)中的一个函数,用于在模板中声明
.controller("ApplicationController", function($scope, AuthService) {
$scope.isAuthenticated = function() {
return AuthService.isAuthenticated();
};
});
认证服务
.service("AuthService", function($http, UserSession) {
this.login = function() { ... };
this.logout = function() { ... };
this.isAuthenticated = function() {
return UserSession.exists();
};
});
会话工厂
.factory("UserSession", function() {
var currUserId = null;
return {
createSession: function(userId) {
currUserId = userId;
},
destroySession: function() {
currUserId = null;
},
exists: function() {
return currUserId !== null;
}
};
});
HTML
<div ng-if="isAuthenticated()"> ... </div>
。。。
这看起来更复杂,但我喜欢它,因为它的模块化设计使得它很容易扩展和重用。代码未经测试,但我希望您能理解 您是否通过Angular应用程序登录前端?还是纯粹的rails?我的登录目前完全是在rails中完成的…谢谢,这太棒了!我正在构建自己的身份验证服务,但这个计划会奏效。
.service("AuthService", function($http, UserSession) {
this.login = function() { ... };
this.logout = function() { ... };
this.isAuthenticated = function() {
return UserSession.exists();
};
});
.factory("UserSession", function() {
var currUserId = null;
return {
createSession: function(userId) {
currUserId = userId;
},
destroySession: function() {
currUserId = null;
},
exists: function() {
return currUserId !== null;
}
};
});
<div ng-if="isAuthenticated()"> ... </div>