Rails 4.2.5+Devise 3.5.1
Gemfile:gem 'omniauth-yandex'
https://rubygems.org/gems/omniauth-yandex/versions...config/secrets.yml:development:
yandex_auth_app_id: xxxx
yandex_auth_secret: yyyy
initializers/devise.rb:config.omniauth :twitter,
Rails.application.secrets.twitter_app_id,
Rails.application.secrets.twitter_app_secret
config.omniauth :facebook,
Rails.application.secrets.facebook_app_id,
Rails.application.secrets.facebook_app_secret
config.omniauth :vkontakte,
Rails.application.secrets.vkontakte_app_id,
Rails.application.secrets.vkontakte_app_secret
config.omniauth :yandex,
Rails.application.secrets.yandex_auth_app_id,
Rails.application.secrets.yandex_auth_secret
controllers/users/omniauth_callback_controller.rb:class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
include SearchLoadFromSession
def vkontakte
provider_login 'ВКонтакте'
end
def twitter
provider_login 'Twitter'
end
def facebook
provider_login 'Facebook'
end
def yandex
provider_login 'Яндекс'
end
private
def provider_login kind
auth = request.env['omniauth.auth']
@user = User.from_omniauth auth
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => kind) if is_navigational_format?
else
flash[:error] = 'Ошибка авторизации.'
redirect_to root_path
end
end
end
config/routes.rb:Rails.application.routes.draw do
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks',
:registrations => 'users/registrations',
:confirmations => 'users/confirmations',
:sessions=> 'users/sessions' },
:path => '',
:path_names => { :sign_in => 'вход', :sign_out => 'выход', :sign_up => 'регистрация'}
...
end
models/user.rbclass User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :trackable, :validatable, :confirmable,
:omniauthable,
:omniauth_providers => [:twitter, :facebook, :vkontakte, :yandex]
.......
ВК, Твиттер, Фейсбук работают. Не работает только Яндекс
После подтверждения доступа пользователем должно происходить следующее (из документации яндекса):
Яндекс.OAuth перенаправляет пользователя на адрес, указанный в поле Callback URL при регистрации приложения. Код подтверждения (или описание ошибки) передается в параметре URL перенаправления.
Приложение получает адрес перенаправления и извлекает код подтверждения.
Приложение отправляет POST-запрос с кодом.
Яндекс.OAuth возвращает токен в теле ответа.