Ich habe Schwierigkeiten, eine Ruby on Rails, ActiveAdmin-Anwendung einzurichten, die Devise für die Authentifizierung verwendet. Ich verwende die Azure AD strategy für die Omniauth-Strategie.So richten Sie eine RoR-Anwendung mit SSO auf Azure AD ein
Ich habe hinzugefügt omniauth Strategie in config/initializers/devise.rb
:
config.omniauth :azure_activedirectory, 'app id', 'azure tenant id'
Hinzugefügt wurde die 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
Und hinzugefügt, um die Callback-Routen zu 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
Added die from_omniauth
Methode 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
Aber alles, was ich bekomme, wenn ich die Anwendung auszuführen ist der Fehler: The action 'sign_in' could not be found for Users::OmniauthCallbacksController
ich am Ende bin jetzt, ich weiß nicht, was sonst muss ich tun, um es zu bekommen arbeiten. https://github.com/AzureAD/omniauth-azure-activedirectory und https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview zeige keine Hinweise mehr auf, wie man es beheben kann.
Kann mir jemand helfen, was ich falsch mache?
Vielen Dank für versuchen zu helfen. Schade, obwohl dies den Fehler behebt, aber ein neues Problem einführt: Ich werde von '/' nach '/ admin' umgeleitet und umgekehrt. –
@MichaelSommer Ich habe meine Antwort bearbeitet, um zu versuchen, dein Problem zu lösen, hoffe, es funktioniert jetzt für dich. –
Wenn ich 'root to:' lösche, werden die Leute nicht mehr zu '/ admin' weitergeleitet und ich erwarte nicht, dass meine Benutzer das selbst erfahren. Meine Wurzel hat den Eintrag für eine API, die Warden statt Devise verwendet. –