Ruby on Rails: добавление входа в Facebook к существующему входу в Authlogic - PullRequest
0 голосов
/ 22 августа 2010

У меня есть сайт, который хорошо работает с логином Authlogic.

Я пытаюсь добавить логин Facebook в качестве опции, используя плагин authlogic_facebook_connect, но он не работает должным образом.

Я следую инструкциям, расположенным здесь: http://github.com/jbasdf/authlogic_facebook_connect

В своей регистрационной форме я добавил кнопку подключения к Facebook, используя описанную процедуру, и при нажатии на нее она успешно отправляет в форму подлинный пользовательский токен, и больше ничего, что, по моему мнению, является ожидаемым результатом , Код контроллера предельно прост:

@new_user = User.new(params[:user])
@new_user.save

В моей модели User я добавил следующий метод before_connect, который никогда не вызывается:

def before_connect(facebook_session)
  self.email = facebook_session.user.email
  reset_persistence_token
end 

Я знаю, что это не вызывается, потому что даже если я добавлю строку типа raise "Error' в before_connect, никакой ошибки не произойдет.

Фактическое сохранение не удалось из-за ряда собственных внутренних проверок authlogic. Я получаю:

  • Электронная почта слишком короткая (минимум 6 символов)
  • Электронная почта должна выглядеть как адрес электронной почты.
  • Пароль слишком короткий (минимум 4 символа)
  • Подтверждение пароля слишком короткое (минимум 4 символа)

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

Что я здесь не так делаю?

1 Ответ

1 голос
/ 22 августа 2010

Я не уверен, что это правильный путь, но наконец-то заставил это работать, просто отключив все проблемные проверки AuthLogic и записав их самостоятельно в моем приложении.

Это код, который я включил в свою модель пользователя:

acts_as_authentic do |c|
  c.validate_login_field = false
  c.validate_email_field = false
  c.validate_password_field = false
end
...