2011-03-12 150 views

回答

1

没有会话与HTTP基本认证相关联,如果您想将认证与必须在应用程序级别进行的会话相关联,听起来就像Rack中间件一样困难。

1

你好对不起已故的回应,我刚才看到你的帖子,也许它仍然可以帮助你: 此代码从太阳石应用程序,它是OpenNebula http://opennebula.org/

use Rack::Session::Pool 

def authorized? 
    session[:ip] && session[:ip]==request.ip ? true : false 
end 

def build_session 
    auth = Rack::Auth::Basic::Request.new(request.env) 
    if auth.provided? && auth.basic? && auth.credentials 
     user = auth.credentials[0] 
     sha1_pass = Digest::SHA1.hexdigest(auth.credentials[1]) 

     rc = SunstoneServer.authorize(user, sha1_pass) 
     if rc[1] 
      session[:user]  = user 
      session[:user_id] = rc[1] 
      session[:password] = sha1_pass 
      session[:ip]  = request.ip 
      session[:remember] = params[:remember] 

      if params[:remember] 
       env['rack.session.options'][:expire_after] = 30*60*60*24 
      end 

      return [204, ""] 
     else 
      return [rc.first, ""] 
     end 
    end 

    return [401, ""] 
end 

def destroy_session 
    session.clear 
    return [204, ""] 
end 
的一部分被拿