使用mongo_session_store-rails3,会话似乎不起作用

时间:2012-04-03 13:32:25

标签: ruby-on-rails session mongodb mongoid ruby-on-rails-3.2

当我使用mongoid作为SessionStore时,我在rails 3.2中遇到了会话问题。我决定使用Brian Hempel's mongo_session_store gem的分叉,因为它已于上个月更新。

在切换到这个gem之前,我使用的是默认的基于cookie的会话存储,并且它没有问题。但现在,当我重定向到另一个页面时,即使flash也不起作用。会话数据似乎会在每个请求中重置。

作为一个侧面问题:每个请求都在db中创建一个新的会话文档!这样对吗?我糊涂了。 =(

我将这些行放在我的Gemfile中:

gem 'mongoid', :git => 'git://github.com/mongoid/mongoid.git'
gem 'bson_ext', "~> 1.5"
gem 'mongo_session_store-rails3', '~> 3.0.5'

然后在我的config/initializers/session_store.rb

SomeAppName::Application.config.session_store :mongoid_store

sessions_controller.rb:

class SessionsController < ApplicationController
  def new
    ...
  end
  def create
    user = User.find_by_identifier(params[:identifier])
    if user && user.authenticate(params[:password])
      session[:uid] = user._id
      redirect_to root_url, :notice => "Logged in!"
    else
      flash.now.alert = "Invalid email or password"
      render :new
    end
  end
  def destroy
    ...
  end
end

如果需要我的代码的任何其他部分,请告诉我发布。提前谢谢。

2 个答案:

答案 0 :(得分:4)

宝石作者。版本4.0.0刚刚发布,它支持Mongoid 3。

gem 'mongo_session_store-rails3', '~> 4.0.0'

答案 1 :(得分:1)

我的项目中存在类似问题和其他问题。 更改为cubewebsites的分支后,所有工作都按预期工作。

分支说明:

此分支旨在解决我在主分支机构遇到的一些问题:

 <class:Session>': undefined method `collection_name=' for ActionDispatch::Session::MongoidStore::Session:Class (NoMethodError)

 <class:Session>': uninitialized constant ActionDispatch::Session::MongoidStore::Session::BSON (NameError)