¿Hay alguna manera en Devise 1.0, la biblioteca para Rails 2.3, de redirigir a una URL específica y no a root_url después de iniciar sesión?Redirigir a una URL específica después de iniciar sesión en
EDIT: se olvidó de mencionar que es Diseñar 1.0
¿Hay alguna manera en Devise 1.0, la biblioteca para Rails 2.3, de redirigir a una URL específica y no a root_url después de iniciar sesión?Redirigir a una URL específica después de iniciar sesión en
EDIT: se olvidó de mencionar que es Diseñar 1.0
Creo que el método after_sign_in_path_for
en Diseñar es lo que estás buscando.
Defina ese método en su ApplicationController y anulará la implementación predeterminada de Devise. Esto es lo que la documentación especifica que hacer.
Detalles aquí: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for
probable es que su usuario está siendo redirigido antes after_sign_in_path
se llama. Esto sucede si el usuario intenta ir directamente a una página que está protegida por autenticación. Esto sucederá todo el tiempo si tiene su root_path
('/') protegido por autenticación.
Hay una discusión sobre los grupos de Google sobre este tema:
La solución rápida y sucia es sobrescribir stored_location_for
para siempre volver nil
así:
class ApplicationController < ActionController::Base
...
private
def stored_location_for(resource_or_scope)
nil
end
def after_sign_in_path_for(resource_or_scope)
my_favorite_path
end
end
Como una ligera variación de esto, solo devuelvo nil de ubicación_de_suministro_para si coincide con '/' que es mi ruta predeterminada. De esa forma irán a after_sign_in_path solo si no intentaran ir a otro lugar explícitamente. Para hacer eso simplemente reemplace nil con "(location = super) == '/'? Nil: location". –
Supongamos que desea mostrar el tablero del usuario después de iniciar sesión.
class HomesController < ApplicationController
def index
if current_user //returns nil if not logged in
@users = User.all
render :dashboard
end
end
def dashboard
@users = User.all
end
end
en routes.rb:
root :to => 'homes#index'
Si ha iniciado sesión, si-bloque se introduce en la acción índice y dashboard.erb se representa. (asegúrese de inicializar todas las variables, requeridas por dashboard.erb, en su bloque if) De lo contrario rieles representa index.erb
Se me olvidó mencionar en Devise 1.0, no 1.1. – Pablo
after_sign_in_path_for no se está llamando en 1.0.8 en absoluto. – Pablo
Observando el SessionsController de Devise, cuando el inicio de sesión es exitoso, se llama a sign_in_and_redirect. Esto redirige a la ubicación anterior almacenada en la sesión. Si no se almacena ninguna ubicación, se llama a after_sign_in_path_for. ¿El usuario está iniciando sesión desde (o desde) la página de inicio? Eso podría explicar por qué siempre redirige allí. – Sidane