kew*_*ang 7 devise ruby-on-rails-3
我有一个使用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
Run Code Online (Sandbox Code Playgroud)
应用程序/佣工/ 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
Run Code Online (Sandbox Code Playgroud)
配置/ routes.rb中
devise_for :users, :controllers => { :sessions => "users/sessions" }
Run Code Online (Sandbox Code Playgroud)
我能做什么?
我的开发环境是Rails 3.1.0,Ruby 1.9.2
Devise 有许多在其控制器中使用的自定义方法。
您可以尝试调用 super 来获取方法,或者
class Users::SessionsController < Devise::SessionsController
def create
sign_in(resource_name, resource)
super
end
end
Run Code Online (Sandbox Code Playgroud)
但我建议包括整个 Devise Sessions#create 方法,然后从该基础进行更改。链接在这里
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2506 次 |
| 最近记录: |