我在我的应用程序中使用authlogic。 我也分开进行A / B测试。 我希望split能够使用authlogic进行身份验证,而不是使用BasicAuthentication或不进行身份验证。
所以我将我的身份验证类设置为split sinatra app的中间件:
Split::Dashboard.use SinatraAuthlogic
然后这应该是我的authlogic中间件:
class SinatraAuthlogic
def initialize(app)
@app = app
end
def call(env)
if is_user_logged_in?
puts @app.class
response = @app.call env
else
response = Rack::Response.new
response.redirect '/login'
response.finish
end
end
private
def is_user_logged_in?
logged_in = UserSession.find && UserSession.find.user
end
end
问题是我应该在is_user_logged_in中添加什么才能使用authlogic?
答案 0 :(得分:0)
经过一番尝试,我想出了这个解决方案:
class Authlogic::RackAdapter < Authlogic::ControllerAdapters::AbstractAdapter
def initialize(env)
request = Rack::Request.new(env)
super(request)
Authlogic::Session::Base.controller = self
end
end
在我的中间件类中,我修改了'is_user_logged_in?'这个方法:
def is_user_logged_id?(env)
begin
adapter = Authlogic::RackAdapter.new(env)
logged_in = UserSession.find && UserSession.find.user
return true
rescue Exception => e
return false
end
end
这样我就可以找到用户......但是当用户没有登录时,如果没有,我得到了一个例外,这就是为什么我把整个代码放在一个救援区......
欢迎任何更好的方法。