ruby-on-rails - gema - rails authentication
Cómo quitar/deshabilitar el registro desde el dispositivo (5)
Acabo de tener el mismo problema. Mi solución es una mezcla de estas respuestas:
Primer comentario / Eliminar el :registerable
en user.rb
class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end
routes.rb
class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end
Segundo, elimine las rutas de registro del routes.rb
en routes.rb
devise_for :users, :skip => [:registrations] , controllers: { sessions: ''users/sessions'' }
Ahora, el dispositivo omitirá todos los enlaces de registro desde su vista y también ya no tendrá las rutas de registro en sus rutas.
Estoy tratando de eliminar / deshabilitar la ruta ''user / sign_up "de Devise. Estoy haciendo esto porque no quiero que personas aleatorias obtengan acceso a la aplicación. Lo tengo en parte al agregar lo siguiente en route.rb
Rails.application.routes.draw do
devise_scope :user do
get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
end
...
devise_for :users, :skip => :registration
end
Sin embargo, esto rompe <%= link_to "Profile", edit_user_registration_path, class: "btn btn-info btn-flat" %>
Que quiero mantener para que los usuarios puedan actualizar su perfil. Sé que es debido a la devise_for :users, :skip => :registration
¿Hay una solución para este problema?
Corriendo
Diseño (4.2.0, 4.1.1, 4.1.0)
Rieles 4.2.5
ruby 2.3.0p0 (2015-12-25 revisión 53290) [x86_64-linux]
Como solo es un alias para devise_scope , puedes poner todo eso en un solo bloque.
devise_for :users, skip: [:registrations]
as :user do
get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
get ''users/edit'' => ''devise/registrations#edit'', :as => ''edit_user_registration''
put ''users'' => ''devise/registrations#update'', :as => ''user_registration''
end
El siguiente código parece hacer el truco por mí:
Rails.application.routes.draw do
devise_scope :users do #notice "users" here, not "user"
get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
end
devise_for :users, :skip => [:registrations]
as :user do
get ''users/edit'' => ''devise/registrations#edit'', :as => ''edit_user_registration''
put ''users'' => ''devise/registrations#update'', :as => ''user_registration''
end
...
La forma más sencilla es simplemente eliminar el módulo de dispositivo ": registerable" de la lista predeterminada definida en su Modelo (el nombre de la clase utilizada por los usuarios de la aplicación, generalmente Usuario ).
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
...
end
Así lo tendrás así:
class User < ActiveRecord::Base
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
...
end
Solución para eliminar la ruta de inicio de sesión de Devise
Ingrese lo siguiente al comienzo de las routes.rb
Rails.application.routes.draw do
devise_scope :user do
get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
end
... Después de la declaración anterior, agregue lo siguiente a continuación en routes.rb
devise_for :users, :skip => [:registrations]
as :user do
get ''users/edit'' => ''devise/registrations#edit'', :as => ''edit_user_registration''
put ''users'' => ''devise/registrations#update'', :as => ''user_registration''
end
Esto eliminará / deshabilitará la ruta user/sign_up
para Devise sin interrumpir edit_user_registration_path
Reinicie su servidor de rieles y debería funcionar.