Комментарии 33
Картинки не хватает в завершении
Я похожие вещи делал на rusrails.ru для авторизации через твиттер, гугл и гитхаб — код можно посмотреть тут github.com/morsbox/rusrails
В принципе все очень похоже.
В принципе все очень похоже.
Ваш пост как нельзя вовремя)
Мне понравилось, пиши ещё!
Хороший топик, спасибо за труд!
Есть вопрос по gem 'twitter-bootstrap-rails', у вас команда rails g bootstrap:layout application fixed сгенерировала haml код?
Есть вопрос по gem 'twitter-bootstrap-rails', у вас команда rails g bootstrap:layout application fixed сгенерировала haml код?
В файл инициализации devise.rb не забываем дописываем строчку:
config.omniauth :vkontakte, 'APP_ID', 'APP_SECRET'
config.omniauth :vkontakte, 'APP_ID', 'APP_SECRET'
Вот так не очень хорошо поступать, стоит сразу привыкать делать правильно, тем более никакой сложности это не вносит. А именно, с oauth секрет кеями вести себя так же, как и с креденшелами к базам данным — выносить в отдельный конфиг, чтобы оно не светилось в репозитории.
config/initializers/devise.rb:
~/mysite/oauth.yml:
config/initializers/devise.rb:
OAUTH_CREDENTIALS_PATH = "#{ENV['HOME']}/mysite/oauth.yml"
OAUTH_CREDENTIALS = YAML.load_file(OAUTH_CREDENTIALS_PATH)[Rails.env]
~/mysite/oauth.yml:
development: &defaults
:vkontakte:
:app_id: 1111111
:app_secret: 11111111111111111111
:app_permissions: "notify,wall,offline"
test:
<<: *defaults
staging:
<<: *defaults
production:
<<: *defaults
:vkontakte:
:app_id: 2222222
:app_secret: 22222222222222222222
:app_permissions: "notify,wall,offline"
/ Le HTML5 shim, for IE6-8 support of HTML elements
— лолМсье знает толк.
Тема не раскрыта до конца, сделать аутентификацию из социальных сетей действительно не сложно и можно. Самое интересное начинается когда задумываться о том что было бы не плохо что бы система логинила меня в один и тот же аккаунт в не зависимости от того из какой сети я зашел, конечно при условии что я предварительно привязал другие аккаунты либо система видит что они относятся к одному и тому же человеку.
Так например, Логинов через социальные сети очень актуальная штука для ресурсов на которые пользователь ходит редко, соответственно и регестрироваться ему лениво. Так вот при таком раскладе, если я захожу редко, я уже не вспоминаю через что я логинился в прошлый раз.
Если социальная сеть отдает почту то система должна сверяться по ней и логинить меня в соответствующий аккаунт, причем если второй раз я за логинился через другую социальную сеть, то система должна дополнить мой профиль информацией из этой сети.
Ну и самое веселое начинается при подключении профилей из социалок. Если я добавлю профиль, аккаунт которого уже существует, система должна их смерджить
Это я все к тому что если задуматься о том как надо бы все это дело сделать то задача далеко не тривиальная
Так например, Логинов через социальные сети очень актуальная штука для ресурсов на которые пользователь ходит редко, соответственно и регестрироваться ему лениво. Так вот при таком раскладе, если я захожу редко, я уже не вспоминаю через что я логинился в прошлый раз.
Если социальная сеть отдает почту то система должна сверяться по ней и логинить меня в соответствующий аккаунт, причем если второй раз я за логинился через другую социальную сеть, то система должна дополнить мой профиль информацией из этой сети.
Ну и самое веселое начинается при подключении профилей из социалок. Если я добавлю профиль, аккаунт которого уже существует, система должна их смерджить
Это я все к тому что если задуматься о том как надо бы все это дело сделать то задача далеко не тривиальная
Позвольте не согласиться: система Вам ничего не должна (-: Не перекладывайте ответственность — помнить сеть, из какой логинились — на чужие плечи. Единственное, что может стоит сделать, — это кукиз какой-то сохранить да и всё, чтоб следующий раз не проходить авторизацию.
Тоже про это подумал, но то, что вы пишете, сделать нельзя. Нет такого признака, по которому можно однозначно определить, принадлежат ли два профиля в фейсбуке и контакте одному и тому же человеку или нет (даже если контакт почту бы давал, у многих соц. сети на разные почты зарегестрированы).
Адрес сайта: h t t p ://127.0.0.1:3000
Можно, но при этом callback на production не будет происходить. У Facebook в настройках приложения можно указать два домена (сайт, мобильный сайт), один из которых можно указать свой сайт, а второй — локалхост. А у ВК — только один.
Советую использовать first_or_create! вместо if/else.
Спасибо автору за перевод статьи из официальной вики девайза, правда, конечно, отличия есть, например, вместо скафолда использовал бутсрап, ибо это сейчас модно. Но зачем это все не совсем понятно, в реальной жизни требуется привязка к одному аккаунту, и это более показательно и интересно. Для того чтобы оставить коммент, можно использовать виджеты, там и социальность сразу.
И, кстати, create! тут по мне не уместен, он просто вызовет RecordInvalid, что приведет пользователя к 500 странице, можно и нужно использовать create или find_or_create_by_url или first_or_create, тем более что дальше идет проверка на существование записи.
Есть ещё один вариант хранения переменных авторизации, это просто хранить их в переменных окружения системы, тогда не нужны файла, которые все равно желательно включать в репо.
И, кстати, create! тут по мне не уместен, он просто вызовет RecordInvalid, что приведет пользователя к 500 странице, можно и нужно использовать create или find_or_create_by_url или first_or_create, тем более что дальше идет проверка на существование записи.
Есть ещё один вариант хранения переменных авторизации, это просто хранить их в переменных окружения системы, тогда не нужны файла, которые все равно желательно включать в репо.
всегда хотел узнать почему omniauth не передает state параметр для защиты
Перестало работать демо-приложение.
У меня очень нубский вопрос. ФБ сейчас требует сертификат при авторизации. Какой самый правильный способ получать его и подпихивать devise`у?
А как реализовать получение почты юзера из социалки и если не отдает то запрашивать, чтоб привязывать к одному аккаунту на сайте?
/home/constantin/testapplication/app/views/users/index.html.haml:13: syntax error, unexpected '<', expecting keyword_end
<hh user=users>.each do |user|
^
/home/constantin/testapplication/app/views/users/index.html.haml:13: syntax error, unexpected '.'
<hh user=users>.each do |user|
^
/home/constantin/testapplication/app/views/users/index.html.haml:23: syntax error, unexpected keyword_ensure, expecting $end
Уже не знаю что и делать, что это за ошибка?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Аутентификация в rails-приложениях с помощью facebook, vkontakte