Разработка пользовательской ошибки входа в систему

У меня есть собственный SessionsController, использующий Devise, когда я просматриваю /users/sign_in и ввожу некоторые данные аутентификации, а затем отправляю, возникают некоторые ошибки.

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

config/routes.rb

devise_for :users, :controllers => { :sessions => "users/sessions" }

что я могу сделать?

Моя среда разработки — Rails 3.1.0, Ruby 1.9.2.


person kewang    schedule 18.09.2011    source источник
comment
Я думаю, что ресурс равен нулю, как в groups.google.com/group/plataformatec. -devise/browse_thread/. Почему вы предполагаете, что у вас есть доступ к вспомогательным методам в вашем контроллере?   -  person e3matheus    schedule 18.09.2011


Ответы (2)


У Devise есть куча пользовательских методов, которые он использует в своих контроллерах.

Вы можете попробовать вызвать super, чтобы получить методы, или

class Users::SessionsController < Devise::SessionsController
  def create
    sign_in(resource_name, resource)
    super
  end
end

Но я бы порекомендовал включить весь метод 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
person ajbraus    schedule 28.08.2013

То, что вы хотите, это

вход_в: пользователь

Я думаю, что распространенная ошибка заключается в том, чтобы создать пользователя, скажем, с Фабрикой, и попробовать

пусть (: пользователь) { создать (: пользователь) }

... и затем вызовите sign_in с текущим_пользователем в виде строки:

вход_в_пользователе

.. что приводит к ужасной ошибке "serialize_in_session".

person Kees Briggs    schedule 11.10.2015