访问config.ru中的机架路由

时间:2012-03-01 02:20:16

标签: ruby rack

我在config.ru中使用Basic Auth进行身份验证。在Auth Basic块中,我想从路径获取ID并检查用户是否有权查看路径。但是,我无法弄清楚如何访问路径。

use Rack::Auth::Basic do |username, password|
  # access path here
end

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

当您通过Rack::Auth::Basic使用use时,实际上是将其插入请求处理链中。这将尝试授权所有请求。要有选择地使用它,仅在某些路径上,您需要仅在相应的请求端点(操作)上执行auth。像 -

这样的东西
# helpers in ApplicationController
def authorized?
  @auth =  Rack::Auth::Basic::Request.new(request.env)
  @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['username', 'password']
end

def username(username)
  @auth.credentials[0]
end

# action in PostsController
def index
 if authorized?(params[:id]) && username == "admin"
   # protected stuff
 else
   render :text => "unauthorized" 
 end
end 

参考:Sinatra doc

虽然通过完整的用户帐户和基于会话的方法可以更好地处理这种身份验证。在rails 3.1或has_secure_password中结帐devise