Нещодавно я писав про авторизацію додатків ВКонтакте використовуючи відкритий протокол OAuth 2.0. У цій статті мова піде про OmniAuth.
OmniAuth - система аутентифікації заснована на Rack, яка значно спрощує зовнішню аутентифікацію в тому сенсі, що вам немає потреби розбиратися в API провайдерів, а також не вимагає ніякої інформації про те, що буде відбуватися з надіcланими після аутентифікації даними.
Що це означає для вас? Це означає, що ви можете легко реалізувати аутентифікацію в вашому додатку через Twitter, Facebook, LinkedIn, Google, GitHub, ВКонтакте, Mailru і т.д. І потім мати повний контроль над нею.
Встановлення
OmniAuth доступна у вигляді gem'а:$ gem install omniauth
Використання
Використовувати OmniAuth так само просто як і будь-яке інше Rack middleware. Немає складної конфігурації під конкретний фреймворк, тільки набір middleware для спрощення реалізації зовнішньої авторизації. Давайте уявимо, що у нас є веб-додаток розроблений на Sinatra, у який нам потрібно додати аутентифікацію через ВКонтакте. Ось, що ми зробимо:# -*- encoding: utf-8 -*-
require 'sinatra'
require 'omniauth'
VKONTAKTE_API_ID = '***'
VKONTAKTE_SECRET_KEY = '***'
use Rack::Session::Cookie
use OmniAuth::Builder do
provider :vkontakte, VKONTAKTE_API_ID, VKONTAKTE_SECRET_KEY
end
Захисний ключ(VKONTAKTE_SECRET_KEY) та ID додатку(VKONTAKTE_API_ID) ви може дізнатися на сторінці налаштувань вашого додатку.
Тепер, якщо я захочете, щоб користувач пройшов аутентифікацію через ВКонтакте, відсилайте його за адресою /auth/vkontakte:
get '/' do
<<-HTML
<a href='/auth/vkontakte'>Sign in with Vkontakte</a>
HTML
end
Користувач буде автоматично перенаправлений на відповідний сайт, де він зможе пройти аутентифікацію. Як тільки аутентифікація завершена, користувач буде перенаправлений назад до /auth/:provider/callback, і OmniAuth автоматично заповнить ключ оточення omniauth.auth інформацією про користувача. Таким чином для клієнта на Sinatra достатньо додати:get '/auth/:name/callback' do
auth = request.env['omniauth.auth']
"Hello, #{auth['user_info']['name']}, you logged in via #{auth['provider']}."
end
У підсумку на сторінку буде виведено ім'я користувача, який пройшов авторизацію.Звичайно, ми можемо зробити щось більше, ніж просто надрукувати ім'я користувача. Але це вже тема для іншої статті...
1 коментар:
Якщо потрібно буде постити на стіну у фейсбук чи писати твіти, тоді згодиться моя стаття про те як це можна зробити через OmniAuth:
http://superp.tumblr.com/post/4109090091/publish-stream-in-facebook-twitter-with-omniauth
Дописати коментар