使用 Rails 4,我无法让 Authlogic 查看我伪造的 UserSession。
我已经设置 pages#whoami 来呈现当前用户的电子邮件地址,作为一个简单的测试。
class PagesController < ApplicationController
# before_filter :require_user
def whoami
render :text => current_user.try(:email) || 'anonymous'
end
end
在 spec/spec_helper.rb 中:
require "authlogic/test_case"
include Authlogic::TestCase
和我的 rspec 测试:
require 'spec_helper'
describe '/whoami' do
setup :activate_authlogic
it "should tell me who I am" do
user = FactoryGirl.create(:user)
user.should be_valid
session = UserSession.create(user)
session.should be_valid
get '/whoami'
response.body.should == user.email
end
end
我更新了我的应用程序控制器以显示当前会话:
def require_user
unless current_user
raise "Current User Session is: #{ current_user_session.inspect}"
store_location
flash[:notice] = "You must be logged in to access this page"
redirect_to new_user_session_url
return false
end
end
使用 before_filter :require_user 评论,我正确地得到“匿名”。当我取消注释时,我看到我的用户会话为零。我尝试查看 authlogic 代码,但在 Authlogic::Session:Persistence::InstanceMethods#persisting?
我正在尝试调试。这就是我到目前为止的位置。
在这里,我们尝试将 Authlogic::Session::Base.controller 设置为测试的模拟控制器: https ://github.com/binarylogic/authlogic/blob/master/lib/authlogic/test_case.rb#L109
在我的规范中,我看到 @controller 是 Authlogic::TestCase::MockController
在我的规范中,我看到 Authlogic::Session::Base.controller 设置为该模拟控制器。
但是,然后我检查一下:
class ApplicationController < ActionController::Base
...
def current_user_session
raise Authlogic::Session::Base.controller.inspect
...
end
end
我看到了 Authlogic::ControllerAdapters::RailsAdapter ...所以不知何故控制器正在设置但没有持久化。我想知道这是否与从 Rails3 切换到 Rails4 有关?
对此的任何见解将不胜感激。
感兴趣的 Gem 版本:gem rspec-core (2.14.5) gem authlogic (3.3.0) gem rails (4.0.0)