Придумайте, как использовать со встроенными документами 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 не может правильно найти пользователя.
Я нашел этот пост вики, но, похоже, устарел.
Я не эксперт по придумкам / надзирателям, поэтому мне нужна помощь с этим. Любая помощь будет очень ценится.
Спасибо!