Devise, OmniAuth & Facebook - Как позволить пользователю редактировать пароль? - PullRequest
12 голосов
/ 02 февраля 2012

Я надеюсь, что у кого-то еще есть хорошее решение для этой проблемы. Мы разрешаем нашим пользователям регистрироваться через Facebook (с помощью приложения), и в то же время они входят в нашу базу данных как пользователи на нашем сайте.

При успешной регистрации кажется, что Devise / OmniAuth создает случайный пароль (?). Как я могу позволить пользователям редактировать свой профиль, который (и должен) по умолчанию в Devise требует, чтобы они вводили свой текущий пароль?

Ответы [ 2 ]

9 голосов
/ 09 февраля 2012

У меня была точно такая же проблема, поэтому я надеюсь, что мое решение будет полезным.

Исходя из подробностей вашего вопроса, я предполагаю, что вы следуете руководству по 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

1 голос
/ 11 марта 2013

Была аналогичная проблема, но в отношении обновления профиля пользователя без подтверждения пароля.Публикация ссылки на нее - надеюсь, это поможет:

stackoverflow - Разрешение пользователям редактировать учетные записи без сохранения паролей в devise

...