我知道如何使用rails REST Web服务,用户只能获取,放置,发布,删除自己的数据?我使用Devise作为我的用户身份验证gem,但我不确定它是否以RESTful方式处理事情。
我如何确保用户“登录”并可以更改其数据?我是否必须在每个请求中传递某种令牌?
答案 0 :(得分:3)
Devise只会为您提供身份验证。这意味着您具有一定程度的确定性,即用户被识别并且他/她是谁/他是谁。根据这些信息,您可以使用Rails机制或其他Rails gems(即CanCan,Aegis,declarative_authorization)来授权用户并定义权限。
一种简单的方法是在您的控制器上使用before_filter
,以确定例如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
is_user_allowed
方法检索正在查询的BlogPost
,并确定是否允许current_user
通过比较用户ID来执行操作。如果不平等是真的,那么它会重定向到我们臭名昭着的access_denied_page_path
。
有关过滤器的详细信息,请参阅此Edge Guides article。
有关可为您提供此功能的Rails宝石的详细信息(以及更多),请浏览Google并搜索rails authorization
。更重要的是,这里有一些应该提供一些见解的Railscast:
答案 1 :(得分:3)
查看AuthLogic's single_access_token。它专为验证REST API而设计。