Как стать автором
Обновить

Oauth 2 провайдер за 30 минут

Время на прочтение2 мин
Количество просмотров11K
Представим, что в один прекрасный день вы решаете подключить oauth2 к своему проекту на ruby on rails. Так как аутентификация большинства rails приложений сейчас идет через devise, то неплохо было бы заинтегрировать oauth2 с этим гемом. Благо, все придумали до нас, поэтому встречайте — devise_oauth2_providable. С этим гемом интеграция и тестирование oauth2 провайдера у вас отнимет времени не больше, чем поход в магазин.


Итак, приступим. Редактируем Gemfile и добавляем туда следующую строчку.

gem 'devise_oauth2_providable'


Как обычно запускаем bundle. Далее, необходимо создать табличку clients, где будут храниться все данные oauth-клиентов. К счастью, разработчики гема позаботились о том, чтобы нам не пришлось писать миграцию ручками

class CreateOauth2Schema < ActiveRecord::Migration
  def self.up
    Devise::Oauth2Providable::Schema.up(self)
  end
  def self.down
    Devise::Oauth2Providable::Schema.down(self)
  end
end

В модель, которой вы хотите дать возможность аутентифицироваться через oauth2, добавим следующую строку:

devise :oauth2_providable, :oauth2_refresh_token_grantable, :oauth2_authorization_code_grantable

Вот и все. Осталось только это дело протестировать.

Для этого тоже есть готовая штука devise-oauth2-provider-client, написанная на синатре.

Для начала, создадим в модельке Client тестовый клиент:


Client.create(
  :name => "Sinatra Client",
  :redirect_uri => "http://localhost:9393/oauth/callback",
  :website => "http://localhost:9393/",
  :identifier => "120094574673767",
  :secret => "b54dc82476af2814e620b86776c42c0e"
)

Затем, склонируем репозиторий и поставим гемы, которые просит приложение с помощью bundle.

Далее, заходим в папку client, редактируем метод get '/oauth/callback'. Там необходимо будет поправить строчку

access_token.get('/me').body

И земенить '/me', на ту страничку, которую нам отдаст главное приложение после успешного логина. Пусть это будет главная страница для теста:

access_token.get('/').body

Запускаем сервер:

bundle exec shotgun

На 9393м порту стартует сервер синатры.

Заходим на страничку http://localhost:9393/oauth/start и если все было сделано правильно, то нас редиректит на 3000й порт с рельсовым приложением, там подтверждаем доступ Sinatra Client, возвращаемся назад уже авторизованными, и нам показывается главная страничка нашего рельсового приложения.
Теги:
Хабы:
Всего голосов 40: ↑37 и ↓3+34
Комментарии10

Публикации

Истории

Работа

Ruby on Rails
7 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн