当我使用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
如果需要我的代码的任何其他部分,请告诉我发布。提前谢谢。
答案 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)