У меня была точно такая же проблема, поэтому я надеюсь, что мое решение будет полезным.
Исходя из подробностей вашего вопроса, я предполагаю, что вы следуете руководству по OmniAuth в вики устройства: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
В следующем методе:
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token.extra.raw_info
if user = User.where(:email => data.email).first
user
else # Create a user with a stub password.
User.create!(:email => data.email, :password => Devise.friendly_token[0,20])
end
end
Я изменил логику в блоке else, потому что он сразу создавал нового пользователя в базе данных и хэшировал для него пароль:
else # Create new user
user =User.new
user
end
Вместо этого я просто создал нового пользователя, чтобы после получения информации на Facebook я направлял его на страницу регистрации, где я заполнял их информацию в полях формы, где они могли редактировать и создавать пароль.
Вам просто нужно убедиться, что вы обновили
def self.new_with_session(params, session)
, чтобы добавить всю релевантную информацию Facebook, которую вы взяли для нового пользователя, и назначить ее новому объекту пользователя, чтобы все эти поля были заполнены их информацией встраница регистрации.Так что после того, как они закончат вводить свой пароль и добавлять или изменять любую информацию и нажимать кнопку «Отправить», создайте нового пользователя.Надеюсь, вы найдете это полезным.
Это было множество идей для вики-страницы Devise и учебного пособия Railscast omniauth: http://railscasts.com/episodes/235-omniauth-part-1