Ответ 1
У меня была такая же проблема, поэтому я надеюсь, что мое решение будет полезно.
Основываясь на деталях в вашем вопросе, я предполагаю, что вы следуете руководству OmniAuth в wiki-разработке: 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