Pull to refresh

Comments 33

Хороший топик, спасибо за труд!
Есть вопрос по gem 'twitter-bootstrap-rails', у вас команда rails g bootstrap:layout application fixed сгенерировала haml код?
Вроде при подключении haml-rails так происходит, гем twitter-bootstrap-rails поддерживает haml.
В файл инициализации devise.rb не забываем дописываем строчку:
config.omniauth :vkontakte, 'APP_ID', 'APP_SECRET'
Вот так не очень хорошо поступать, стоит сразу привыкать делать правильно, тем более никакой сложности это не вносит. А именно, с oauth секрет кеями вести себя так же, как и с креденшелами к базам данным — выносить в отдельный конфиг, чтобы оно не светилось в репозитории.

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"

Тогда уж лучше
Rails.root.join("config", "oauth.yml")
/ Le HTML5 shim, for IE6-8 support of HTML elements — лол

Мсье знает толк.
Тема не раскрыта до конца, сделать аутентификацию из социальных сетей действительно не сложно и можно. Самое интересное начинается когда задумываться о том что было бы не плохо что бы система логинила меня в один и тот же аккаунт в не зависимости от того из какой сети я зашел, конечно при условии что я предварительно привязал другие аккаунты либо система видит что они относятся к одному и тому же человеку.

Так например, Логинов через социальные сети очень актуальная штука для ресурсов на которые пользователь ходит редко, соответственно и регестрироваться ему лениво. Так вот при таком раскладе, если я захожу редко, я уже не вспоминаю через что я логинился в прошлый раз.

Если социальная сеть отдает почту то система должна сверяться по ней и логинить меня в соответствующий аккаунт, причем если второй раз я за логинился через другую социальную сеть, то система должна дополнить мой профиль информацией из этой сети.

Ну и самое веселое начинается при подключении профилей из социалок. Если я добавлю профиль, аккаунт которого уже существует, система должна их смерджить

Это я все к тому что если задуматься о том как надо бы все это дело сделать то задача далеко не тривиальная
Позвольте не согласиться: система Вам ничего не должна (-: Не перекладывайте ответственность — помнить сеть, из какой логинились — на чужие плечи. Единственное, что может стоит сделать, — это кукиз какой-то сохранить да и всё, чтоб следующий раз не проходить авторизацию.
Тоже про это подумал, но то, что вы пишете, сделать нельзя. Нет такого признака, по которому можно однозначно определить, принадлежат ли два профиля в фейсбуке и контакте одному и тому же человеку или нет (даже если контакт почту бы давал, у многих соц. сети на разные почты зарегестрированы).
Просто когда уже вошел в аккаунт, подключаешь дополнительные аккаунты уже из своего профиля. Много где это реализовано.
Для теста вконтакта локально не обязательно использовать localtunnel, можно прописать:
Адрес сайта: 127.0.0.1:3000
Базовый домен: 127.0.0.1
Можно, но при этом callback на production не будет происходить. У Facebook в настройках приложения можно указать два домена (сайт, мобильный сайт), один из которых можно указать свой сайт, а второй — локалхост. А у ВК — только один.
я обычно использую 2 приложения, одно для локального теста, другое для продакшена
ИМХО если нужна простая аутентификация, то легче использовать Loginza.

Остается только забирать данные и при необходимости давать пользователю отредактировать.
Логинза отвратительна. И внешне, и по юзабилити. Как минимум нужно три клика, чтобы войти.
Спасибо автору за перевод статьи из официальной вики девайза, правда, конечно, отличия есть, например, вместо скафолда использовал бутсрап, ибо это сейчас модно. Но зачем это все не совсем понятно, в реальной жизни требуется привязка к одному аккаунту, и это более показательно и интересно. Для того чтобы оставить коммент, можно использовать виджеты, там и социальность сразу.
И, кстати, 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


Уже не знаю что и делать, что это за ошибка?
Это особенность верстки на Хабре.
<hh user=users> необходимо заменить на @users
спасибо, забыл написать что разобрался)
Sign up to leave a comment.

Articles