使用 Ruby on Rails 的 angular.js 中的安全性

Posted

技术标签:

【中文标题】使用 Ruby on Rails 的 angular.js 中的安全性【英文标题】:Security in angular.js with Ruby on Rails 【发布时间】:2012-08-02 22:28:04 【问题描述】:

进行身份验证的最佳方法是什么?

在前端我使用 Angular.js

在后端:Ruby on Rails

Rails 应用程序用作我前端的 API。

更新: 这将是单页应用程序。 前端将使用 Angular.js 开发,后端使用 Ruby on Rails。 理想情况下,我想将后端构建为 json 中返回的资源集合。

我搜索安全实施的最佳方法。

当用户打开应用程序时,我需要检查用户是否经过身份验证。 如果没有 - 转到登录页面, 如果经过身份验证 - 打开他想要的并从后端返回所需的资源。

我认为我需要在客户端存储身份验证令牌。 生成它的最佳方法是什么,或者 Rails 已经为我生成了它?

【问题讨论】:

我想我知道您提出问题的方向。我个人对此也很感兴趣。也许你可以改写一下。您能否具体说明您要解决的具体问题,而不是笼统地问这个问题。 【参考方案1】:

我根本不了解 Angular.JS,但我会尽力为您提供有关可以与任何 javascript 框架一起使用的 Rails 的一般信息。

对于身份验证,您只需要:

用户模型 处理登录的控制器,此方法检查用户登录名/密码,创建一个包含所有所需信息的会话对象(会话存储在服务器端,客户端使用 cookie 将每个请求与会话相关联) 用于处理注销的控制器,基本上只会破坏用户的会话

你有一个很好的实现in the rails tutorial here,或者你可以找到几个插件(authlogic似乎是***用户的推荐here)。

然后,使用静态 html 页面或使用 AJAX 处理身份验证之间几乎没有区别:

HTML 请求将向控制器发送登录名和密码,一旦会话创建,控制器将自动将其重定向到另一个内部页面 在 AJAX 中,客户端的 javascript 应该发送一个 ajax 请求,寻找服务器的答案(成功/失败)并启动适应的操作(如果失败则消息,如果成功则重定向)

在这两种情况下,重要的是检查用户在每个控制器上是否经过身份验证,否则任何人都将被允许启动操作或访问内部信息。

【讨论】:

【参考方案2】:

我正在尝试做类似的事情,我发现这个示例应用程序对让我朝着正确的方向前进非常有用:https://github.com/karlfreeman/angular-devise

还可以在这里查看有关它的进一步讨论:https://github.com/karlfreeman/angular-devise/issues/1

这是另一个采用稍微不同方法的 repo:https://github.com/colindensem/demo-rails-angularjs

我最终借鉴了以上所有的想法。如果有人感兴趣,这是一个工作演示:https://github.com/jesalg/RADD

【讨论】:

以上是关于使用 Ruby on Rails 的 angular.js 中的安全性的主要内容,如果未能解决你的问题,请参考以下文章

思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)

Ruby on Rails Installation(Learn Rails5.2)

ruby on rails (函数使用)

Ruby on Rails - 在 OSX 上使用 Ruby 2.4.4 而不是 rails 5.1.6 的配置问题/异常

Ruby On Rails 使用错误的版本执行

Ruby on Rails Cron 作业示例