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 ?