Rack :: Auth :: Basic销毁会话(注销)

时间:2011-03-12 11:35:23

标签: ruby rack basic-authentication authentication

我使用Rack :: Auth :: Basic进行授权,它可以工作,但我需要能够销毁用户会话并让他重新登录或注销。如何制作?

2 个答案:

答案 0 :(得分:1)

没有与HTTP基本身份验证相关联的会话,如果您想将身份验证与您在应用程序级别必须执行的会话相关联,那么作为Rack中间件听起来很难。

答案 1 :(得分:1)

对不起,我刚刚看到你的帖子后来回复,也许它仍然可以帮助你: 此代码来自Sunstone应用程序,它是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