我有一个使用Devise的自定义SessionsController,当我浏览/ users / sign_in并输入一些authdata然后提交时,会出现一些错误。
NoMethodError in Users::SessionsController#create undefined method `serialize_into_session' for Symbol:Class Rails.root: /home/kewang/rails/devisetest Application Trace | Framework Trace | Full Trace devise (1.4.5) lib/devise/rails/warden_compat.rb:19:in `serialize' warden (1.0.5) lib/warden/session_serializer.rb:25:in `store' warden (1.0.5) lib/warden/proxy.rb:161:in `set_user' devise (1.4.5) lib/devise/controllers/helpers.rb:111:in `sign_in' app/controllers/users/sessions_controller.rb:3:in `create'
应用程序/控制器/用户/ sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
def create
sign_in(resource_name, resource)
end
end
应用程序/助手/ application_helper.rb
module ApplicationHelper
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
end
配置/ routes.rb中
devise_for :users, :controllers => { :sessions => "users/sessions" }
我能做什么?
我的开发环境是Rails 3.1.0,Ruby 1.9.2
答案 0 :(得分:1)
Devise在其控制器中使用了一堆自定义方法。
您可以尝试调用super来获取方法,或者
class Users::SessionsController < Devise::SessionsController
def create
sign_in(resource_name, resource)
super
end
end
但我建议包括整个Devise Sessions #create方法,然后改变那个基础的东西。 Link here
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
答案 1 :(得分:0)
你想要的是
sign_in:user
我认为常见的错误是创建用户,比如工厂,然后尝试
let(:user){create(:user)}
...然后使用current_user作为字符串调用sign_in:
sign_in用户
..这会导致可怕的“serialize_in_session”错误。