Придумайте, как использовать со встроенными документами MongoDB

В моем приложении Rails мне нужны модели: учетная запись и пользователь. Я использую MongoID и Devise с Omniauth.

У меня возникли некоторые проблемы с devise и warden относительно правильной регистрации пользователей с этой конфигурацией:

class Account
  #code..
  include Mongoid::Document
  embeds_many :users
  #code..
end

class User
  #code..
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable
  devise :omniauthable, omniauth_providers: [:twitter] #just an example.. 

  include Mongoid::Document
  embedded_in :account
  #code..
end

И довольно стандартный OmniauthCallbacksController:

 class OmniauthCallbacksController < Devise::OmniauthCallbacksController

   def twitter
     callback_of('Twitter')
   end

   protected

   def callback_of(provider)
     @user = User.find_user_from(request.env["omniauth.auth"])
     @user = User.new_with(request.env["omniauth.auth"]) if @user.blank?

     if @user.persisted?
       sign_in_and_redirect @user, event: :authentication #this will throw if @user is not activated
       set_flash_message(:notice, :success, kind: provider) if is_navigational_format?
     else
       redirect_to new_user_registration_path, alert: "There was a problem with your #{provider} account. Please try again."
     end
   end

   def after_sign_in_path_for(resource)
     if resource.registered
       account_path(resource.account)
     else
       new_account_path
     end
   end
end

Этот код прекрасно работает, если пользователь не зарегистрирован, создается документ учетной записи и внутри него хранится встроенный документ пользователя. Тогда это называется sign_in_and_redirect @user, event: :authentication и пользователь правильно вошел в систему. Затем происходит перенаправление на new_account_path где вещи становятся странными..

После перенаправления пользователь больше не входит в систему, поэтому все разработчики, например current_user бесполезны. Я предполагаю, что это вызвано тем, что пользователи встроены в учетные записи, поэтому Warden не может правильно найти пользователя.

Я нашел этот пост вики, но, похоже, устарел.

Я не эксперт по придумкам / надзирателям, поэтому мне нужна помощь с этим. Любая помощь будет очень ценится.

Спасибо!

0 ответов

Другие вопросы по тегам