Я пытаюсь настроить приложение Ruby on Rails, ActiveAdmin, которое использует для проверки подлинности Devise. Я использую Azure AD strategy для стратегии omniauth.Как установить приложение RoR с SSO на Azure AD
Я добавил OmniAuth стратегии в config/initializers/devise.rb
:
config.omniauth :azure_activedirectory, 'app id', 'azure tenant id'
Добавлен Users::OmniauthCallbacksContoller
:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def azure_activedirectory
@user = AdminUser.from_omniauth(request.env['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 => 'azure_activedirectory') if is_navigational_format?
else
session['devise.azure_activedirectory_data'] = request.env['omniauth.auth']
redirect_to new_admin_user_registration_url
end
end
def failure
redirect_to root_path
end
end
И добавил обратный вызов маршруты в routes.rb
:
Rails.application.routes.draw do
devise_config = ActiveAdmin::Devise.config
devise_config[:controllers][:omniauth_callbacks] = 'users/omniauth_callbacks'
devise_for :admin_users, devise_config
devise_scope :admin_user do
get 'sign_in', :to => 'devise/sign_in', as: :new_admin_user_session
get 'sign_out', :to => 'devise/sign_out', :as => :destroy_admin_user_session
end
ActiveAdmin.routes(self)
root to: redirect('/admin')
end
Добавлен from_omniauth
методаmodels/admin_user
:
class AdminUser < ActiveRecord::Base
devise :trackable, :omniauthable, omniauth_providers: [:azure_activedirectory]
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
end
end
end
Но все, что я получаю, когда я запустить приложение является ошибка: The action 'sign_in' could not be found for Users::OmniauthCallbacksController
Я к концу сейчас, я не знаю, что еще я должен сделать, чтобы заставить его работать. https://github.com/AzureAD/omniauth-azure-activedirectory и https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview больше не показывать ни одной записи о том, как ее исправить.
Может ли кто-нибудь помочь мне в том, что я делаю неправильно?
Спасибо за попытку помочь. Слишком плохо, хотя это решает ошибку, но вводит новую проблему: я перенаправляюсь из '/' в '/ admin' и наоборот. –
@MichaelSommer Я отредактировал свой ответ, чтобы попытаться решить вашу проблему, надеюсь, что он работает для вас сейчас. –
Когда я удаляю «root to:», люди больше не будут перенаправлены на '/ admin', и я не ожидаю, что мои пользователи сами это узнают. У моего корня есть запись для api, которая использует Warden вместо разработки. –