Rails Web服务与身份验证??? 用户登录??

new*_*ils 8 rest ruby-on-rails restful-authentication

任何想法我会怎么做有一个rails REST Web服务,用户只能获取,放置,发布,删除自己的数据?我使用Devise作为我的用户身份验证gem,但我不确定它是否以RESTful方式处理事情.

我如何确保用户"登录"并可以更改其数据?我是否必须在每个请求中传递某种令牌?

Joh*_*ohn 3

Devise 只会为您提供身份验证。这意味着您可以在一定程度上确定用户已被识别并且是他/她所说的用户。有了这些信息,您就可以使用 Rails 机制或其他 Rails gem(即 CanCan、Aegis、declarative_authorization)来授权用户并定义权限。

before_filter一个简单的方法是在相关控制器上使用 a来确定 a 是否BlogPost属于已登录的用户。

这是我的意思的一个简单例子:

class BlogPostsController < ApplicationController
  before_filter :is_user_allowed, :only => [:edit, :delete, :show]

  # default Rails generated RESTful methods here    

  def is_user_allowed
    if BlogPost.find(params[:id]).try(:user_id) != current_user.id
      redirect_to access_denied_page_path
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

is_user_allowed方法检索BlogPost正在查询的用户,并current_user通过比较用户 ID 来确定是否允许该用户执行该操作。如果不等式成立,那么它就会重定向到我们臭名昭著的access_denied_page_path.

有关过滤器的更多信息,请参阅这篇边缘指南文章

有关可以为您提供此功能(以及更多功能)的 Rails gem 的更多信息,请在 Google 上浏览并搜索rails authorization. 此外,这里有一些 Railscast 应该可以提供一些见解:

  • 当通过有会话数据的网络浏览器登录时,这部分没问题。如果我尝试通过curl 调用执行受限方法。这不能处理它,因为我实际上正在尝试使用 REST API。所以我看到了两种方法,一种是使用基本的 http 身份验证,另一种是使用 API 密钥来识别特定用户。对我来说,这两种方式在安全方面似乎都非常薄弱:( (2认同)