Rack :: Auth :: Основной сеанс уничтожения (выход) - PullRequest
2 голосов
/ 12 марта 2011

Я сделал авторизацию, используя Rack :: Auth :: Basic, она работает, но мне нужно иметь возможность уничтожить сеанс пользователя и позволить ему повторно войти или выйти из системы. Как это можно сделать?

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Здравствуйте, извините за поздний ответ, я только что увидел ваш пост, возможно, он все еще может помочь вам: Этот код был взят из приложения 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
1 голос
/ 12 марта 2011

Нет сеанса, связанного с базовой аутентификацией HTTP, если вы хотите связать аутентификацию с сеансом, который вам придется делать на уровне приложения, это звучит как промежуточное программное обеспечение Rack.

...