ruby-on-rails - español - ruby on rails pdf
Establecer el inicio de sesión de Devise para ser página raíz (8)
Algunas de estas soluciones son demasiado complejas. Solo usa tus habilidades de Rails para abofetear a Devise al revés:
Agregue ''get'' ''users/root'', to: ''users#root''
a config / routes.rb.
En UsersController, haga algo como:
def root
if user_signed_in?
redirect_to root_for_signed_in_user_path (or whatever)
else
redirect_to new_user_session_path
end
end
Estoy usando el siguiente código para mis rutas:
devise_for :user,
:as => '''',
:path_names => {
:sign_in => "",
:sign_out => "logout",
:sign_up => "register"
}
Pero cuando estoy desconectado y goto /logout
obtengo el siguiente error:
Ninguna ruta coincide con {: action => "new",: controller => "idear / sessions"}
¿Cómo configuro la ruta raíz para estar en :sign_in
acción?
Para continuar de las personas que preguntan sobre el error Could not find devise mapping for path "/"
hay una solución alternativa.
Descubrirá que hay una pista en sus registros que probablemente diga:
[Devise] Could not find devise mapping for path "/".
This may happen for two reasons:
1) You forgot to wrap your route inside the scope block. For example:
devise_scope :user do
match "/some/route" => "some_devise_controller"
end
2) You are testing a Devise controller bypassing the router.
If so, you can explicitly tell Devise which mapping to use:
@request.env["devise.mapping"] = Devise.mappings[:user]
Así que volví a intentar el enfoque, pero en lugar de envolverlo (como @miccet sugiere) dentro de un bloque de alcance:
devise_scope :user do
root to: "devise/sessions#new"
end
Esto funcionó bien para mi
Supongo que tienes diferentes roles de usuario. Si lo hace, debe agregar un alcance como este al recurso de los usuarios:
devise_scope :user do
get "/logout" => "devise/sessions#destroy"
end
Puede leer más sobre la anulación de las rutas de diseño aquí: https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
Tengo esto para trabajar con @VvDPzZ respuesta. Pero tuve que modificarlo un poco
devise_scope :business_owner do
authenticated do
root to: ''pages#dashboard''
end
unauthenticated do
root to: ''devise/sessions#new'', as: ''unauthenticated_root''
end
end
Tuve que hacer un anuncio to:
en la declaración de la ruta raíz. También eliminé el as: :authenticated_root
porque ya tenía algunos lugares en mi aplicación root_path
referencia a root_path
en los enlaces. Al omitir la parte as: :authenticated_root
, no tuve que cambiar ninguno de mis enlaces existentes.
Usando Rails 3.2 y diseñar 3.2.3 Me las arreglo para configurar mi página de inicio " home # index " (controlador # acción) como la página de inicio de sesión haciendo los siguientes cambios.
# 1 Agregó el formulario de inicio de sesión a la página de inicio:
<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<%= f.input :email %>
<%= f.input :password %>
<%= f.button :submit %>
<% end %>
# 2 Métodos agregados resource_name, resource y devise_mapping para app / heldpers / application_helper.rb :
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
# 3 Creó una aplicación de controlador de sesión personalizada / controladores / usuarios / sessions_controller.rb :
class Users::SessionsController < Devise::SessionsController
protected
# This method tell sessions#create method to redirect to home#index when login fails.
def auth_options
{ scope: resource_name, recall: ''home#index'' }
end
end
# 4 Omita las rutas de sesión y configure el controlador de sesiones personalizado en config / routes.rb :
devise_for :users, path: ''auth'', skip: [:sessions],
controllers: {
sessions: ''users/sessions''
}
as :user do
get ''auth/sign_in'' => ''home#index'', as: :new_user_session
post ''auth/sign_in'' => ''users/sessions#create'', as: :user_session
delete ''auth/sign_out'' => ''users/sessions#destroy'', as: :destroy_user_session
end
(Esto fue publicado como una edición sugerida , pero debería haber sido una respuesta propia. No sé si tiene sentido o no. Estimado editor anónimo: no dude en volver a publicar esta respuesta como la suya, y déjeme un comentario así que borraré esta copia).
root :to => redirect("/users/login")
devise_for :users
devise_scope :user do
authenticated :user do
root ''home#index'', as: :authenticated_root
end
unauthenticated do
root ''devise/sessions#new'', as: :unauthenticated_root
end
end
Justo como este, probado en Rails Rails 4.1.0.rc1.
root :to => "devise/sessions#new"
Necesitaba establecer la raíz de inicio predeterminada. Me sentí como si hubiera intentado esto toda la noche de anoche (antes de publicar la pregunta), pero está funcionando ahora. Si está desconectado, Devise intenta redirigirlo a la ruta raíz que no había definido.