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

Ruby on Rails
Представим, что в один прекрасный день вы решаете подключить 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, возвращаемся назад уже авторизованными, и нам показывается главная страничка нашего рельсового приложения.
Tags:ruby on railsoauth 2.0devise
Hubs: Ruby on Rails
+34
9.8k 72
Comments 10

Popular right now

Team Lead 2.0
January 28, 202190,000 ₽OTUS
Профессия Product Manager
January 27, 2021108,500 ₽Нетология
Аналитика для руководителей
January 27, 202167,500 ₽Нетология
Product Manager IT-проектов
January 28, 202160,000 ₽OTUS
JavaScript Developer. Professional
January 28, 202170,000 ₽OTUS