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