带有身份验证的 Rails Web 服务???用户登录??
Posted
技术标签:
【中文标题】带有身份验证的 Rails Web 服务???用户登录??【英文标题】:Rails Web service with authentication??? User logged in ?? 【发布时间】:2011-05-08 05:30:16 【问题描述】:知道我将如何拥有一个 Rails REST Web 服务,其中用户只能获取、放置、发布、删除他们自己的数据?我使用 Devise 作为我的用户身份验证 gem,但我不确定这是否以 RESTful 方式处理事情。
我如何确保用户已“登录”并且可以更改他们的数据?我是否必须在每个请求中传递某种令牌??
【问题讨论】:
【参考方案1】:Devise 只会为您提供身份验证。这意味着您可以确定用户已被识别并且他/她所说的他/她是谁。有了这些信息,您可以使用 Rails 机制或其他 Rails gem(即 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
,并通过比较用户ID 来确定是否允许current_user
执行操作。如果不等式为真,那么它会重定向到我们臭名昭著的access_denied_page_path
。
有关过滤器的更多信息,请参阅Edge Guides article。
有关可为您提供此功能(以及更多)的 Rails gems 的更多信息,请在 Google 上浏览并搜索 rails authorization
。此外,这里有一些 Railscasts 应该提供一些见解:
【讨论】:
这部分在通过有会话数据的网络浏览器登录时很好。如果我要尝试通过 curl 调用执行受限方法。这无法处理它,因为我实际上正在尝试使用 REST API。所以我看到了两种方法,一种是使用基本的 http 身份验证,另一种是使用 API 密钥来识别特定用户。对我来说,这两种方式的安全性似乎都很弱:(【参考方案2】:看看AuthLogic'ssingle_access_token。它是为验证 REST API 而设计的。
【讨论】:
以上是关于带有身份验证的 Rails Web 服务???用户登录??的主要内容,如果未能解决你的问题,请参考以下文章
Rails Routes:带有身份验证块的更清晰的 if 语句
Nodejs Express 用于 Web 应用程序 JWT,带有数据库或会话以验证用户身份
使用带有摘要身份验证、jquery ajax 调用的 RestFul PHP Web 服务