Devise super class function override

Herkese selam. Devise gem ile çalışıyorum.
Admin olarak login olduktan sonra diğer kullanıcıları eklemek istiyorum.
Devise "gem"ini user modeli üzerine kurdum.
Kullanıcı oturum açmışsa Devise default olarak sign_up yolunu aşağıdaki gibi require_no_authentication methoduna yönlendiriyor.

#gem'in orjinal kodları
class Devise::RegistrationsController < DeviseController
  prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
end

Ben kendi user/registration_controller dosyamda bu kodu ezemiyorum(override). prepend_before_action callback’i Super class içinde olduğundan otomatik çağırılıyor.

Kod aşağıdaki gibi değişince uygulama istediğim gibi oluyor fakat projeyi başka yerde build etsek devise yeniden yükleneceği için kod tekrar düzenlenmeye ihtiyaç duyacak.

#değişince çalışıyor
class Devise::RegistrationsController < DeviseController
  prepend_before_action :require_no_authentication, only: [:cancel]
end




#gem
class DeviseController < Devise.parent_controller.constantize
def require_no_authentication
    assert_is_devise_resource!
    return unless is_navigational_format?
    no_input = devise_mapping.no_input_strategies

    authenticated = if no_input.present?
      args = no_input.dup.push scope: resource_name
      warden.authenticate?(*args)
    else
      warden.authenticated?(resource_name)
    end

    if authenticated && resource = warden.user(resource_name)
      set_flash_message(:alert, 'already_authenticated', scope: 'devise.failure')
      redirect_to after_sign_in_path_for(resource)
    end
  end
end

#gem
class Devise::RegistrationsController < DeviseController
  prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
  prepend_before_action :authenticate_scope!, only: [:edit, :update, :destroy]
  prepend_before_action :set_minimum_password_length, only: [:new, :edit]
end

#benim proje
class Users::RegistrationsController < Devise::RegistrationsController
#burada yukarıdaki require_no_authentication metodunu ezemiyorum.
# yada prepend_befor_action'u ezemiyorum
end

Nasıl bir yol izlemeli ?

user/registration_controller.rb dosyasında skip_before_action ile geçilebiliyor olması lazım.

class Devise::RegistrationsController < DeviseController
  skip_before_action :require_no_authentication, only: [:new, :create]
end

Kendim test etmedim öneri olarak bırakıyorum.

2 Likes

Maalesef işe yaramadı :frowning: