Представим, что в один прекрасный день вы решаете подключить oauth2 к своему проекту на ruby on rails. Так как аутентификация большинства rails приложений сейчас идет через devise, то неплохо было бы заинтегрировать oauth2 с этим гемом. Благо, все придумали до нас, поэтому встречайте — devise_oauth2_providable. С этим гемом интеграция и тестирование oauth2 провайдера у вас отнимет времени не больше, чем поход в магазин.
Итак, приступим. Редактируем Gemfile и добавляем туда следующую строчку.
Как обычно запускаем bundle. Далее, необходимо создать табличку clients, где будут храниться все данные oauth-клиентов. К счастью, разработчики гема позаботились о том, чтобы нам не пришлось писать миграцию ручками
В модель, которой вы хотите дать возможность аутентифицироваться через oauth2, добавим следующую строку:
Вот и все. Осталось только это дело протестировать.
Для этого тоже есть готовая штука devise-oauth2-provider-client, написанная на синатре.
Для начала, создадим в модельке Client тестовый клиент:
Затем, склонируем репозиторий и поставим гемы, которые просит приложение с помощью bundle.
Далее, заходим в папку client, редактируем метод get '/oauth/callback'. Там необходимо будет поправить строчку
И земенить '/me', на ту страничку, которую нам отдаст главное приложение после успешного логина. Пусть это будет главная страница для теста:
Запускаем сервер:
На 9393м порту стартует сервер синатры.
Заходим на страничку http://localhost:9393/oauth/start и если все было сделано правильно, то нас редиректит на 3000й порт с рельсовым приложением, там подтверждаем доступ Sinatra Client, возвращаемся назад уже авторизованными, и нам показывается главная страничка нашего рельсового приложения.
Итак, приступим. Редактируем 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, возвращаемся назад уже авторизованными, и нам показывается главная страничка нашего рельсового приложения.