26 de Fevereiro de 2024 - @Walmir Neto
Esse dias, mostrei como fazer Aplicações Ruby on Rails rapidinhas com Avo só que a área administrativa ficou sem login. A idéia hoje é usar o devise para resolver isso
Primeiro passo é adicionar a gem devise
, além dela gosto de adicionar a devise-i18n
para não precisar tá lidando com tradução
--- a/Gemfile
+++ b/Gemfile
group :test do
# <https://github.com/vicentllongo/simplecov-json#usage>
gem "simplecov-json", "~> 0.2.3"
end
gem "avo", ">= 3.2"
+# <https://github.com/heartcombo/devise#getting-started>
+gem "devise", "~> 4.9", ">= 4.9.3"
+# <https://github.com/tigrish/devise-i18n#customizing-views>
+gem "devise-i18n", "~> 1.12"
Para gerar o arquivo config/initializers/devise.rb
rode um rails g devise:install
. Outro arquivo gerado é config/locales/devise.en.yml
, mas esse podemos remover, pois adicionamos a gem devise-i18n
que já possui essas traduções
bin/rails g devise User && bin/rails db:migrate
Além disso, caso usem turbo no seu projeto, precisamos descomentar no config/initializers/devise.rb
essa linha:
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
# The "*/*" below is required to match Internet Explorer requests.
- # config.navigational_formats = ['*/*', :html, :turbo_stream]
+ config.navigational_formats = ["*/*", :html, :turbo_stream]
Mas uma coisa é mudar a rota do avo para não ficar disponível para todos
--- a/config/routes.rb
+++ b/config/routes.rb
Rails.application.routes.draw do
# Defines the root path route ("/")
root "home#index"
- mount Avo::Engine, at: Avo.configuration.root_path
+ authenticate :user do
+ mount Avo::Engine, at: Avo.configuration.root_path
+ end
Caso só algum tipo de usuário possa acessar seu Avo, você pode fazer algo assim:
authenticate :user, ->(user) { user.with_super_power? } do
mount Avo::Engine, at: Avo.configuration.root_path
end
Depois que fiz esses ajustes o teste da listagem de posts quebraram, precisamos setar o login nos tests, para isso precisamos criar alguns arquivos