ruby on rails - signup - Idear: Página de inicio de sesión como Bienvenida/Página de destino y luego Perfil de usuario
devise wiki (5)
En la página raíz, compruebe si el usuario inició sesión y redireccione en función de eso.
redirect_to sign_up_path if current_user.nil?
Alternativamente, podría renderizar diferentes plantillas en lugar de una redirección, pero creo que es más limpio tener una correspondencia de 1: 1 entre urls y páginas.
Usando el diseño, ¿cómo hago que mi suscripción sea mi página de inicio / recepción y luego, después de registrarme, ingresen al sitio en el perfil / área de inicio de sesión?
Estoy tratando de averiguar cómo hacer que Facebook sea un lado del sitio; el exterior (registro, acerca, contacto, etc.) y el interior (perfil, cierre de sesión, etc.) para los usuarios solo después de registrarse o iniciar sesión.
Gracias.
PD: Soy nuevo en Ruby on Rails y creo aplicaciones, pero hice el sistema de autenticación con el Tutorial de Rails 3, entiendo la mayoría de las cosas para comenzar a usar Devise, no sé por dónde empezar con esta situación.
Iba a usar 2 diseños de aplicaciones, 1 antes de iniciar sesión, que es layouts / welcome.html.erb con PagesController (acerca de, términos, etc.) y el otro para usuarios registrados que serán layouts / application.html.erb con ApplicationController (perfil, noticias, agregar, etc.), ¿son estos los mejores pasos?
Encuentro que es más fácil rootear a la página de inicio autenticada deseada y solo uso un before_filter para forzar al usuario a iniciar sesión / registrarse primero a través de un before_filter.
En este caso, digamos que su "área de inicio de sesión" es un controlador / acción llamada perfil / índice.
En su routes.rb, establezca la raíz en el perfil / índice.
root :to => ''profile#index''
Luego, en su controlador_perfil, configure lo siguiente before_filter.
before_filter :authenticate_user!
Esto automáticamente empujará a un usuario conectado (o uno que haya iniciado sesión anteriormente y haya configurado una cookie Recordarme) directamente a la página de perfil. Cualquier usuario no autenticado terminará automáticamente al iniciar sesión. También querrá un enlace (o pestaña separada) en esa página para registrarse.
en tus rutas.rb:
root :to => ''welcome#index''
Donde bienvenido es el controlador y el índice es la acción.
En su controlador de aplicación:
def after_sign_in_path_for(user)
"/url_you_want_to_redirect_to/"
end
Otro enfoque es modificar el diseño. Edite devise_gem_path / lib / devise / failure_app.rb y reemplace las dos instancias en el método redirect_url de:
:"new_#{scope}_session_path"
con:
:"new_#{scope}_registration_path"
Una solución menos destructiva haría que la respuesta de redirect_url fuera más configurable.
Esta es mi nueva y actualizada forma de usar Rails 3.1.0
y Devise 1.5.0
:
routes.rb
root :to => "pages#redirect_to_sign_up"
devise_for :users do
get "welcome" => "devise/registrations#new", :as => :new_user_registration
get "account_settings" => "devise/registrations#edit"
get "sign_in" => "devise/sessions#new"
get "sign_out" => "devise/sessions#destroy"
get "new_password", :to => "devise/passwords#new"
end
match ''home'', :to => "user_pages#home"
namespace :user do
root :to => "user_pages#home"
end
application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
protected
def after_sign_in_path_for(resource)
stored_location_for(:user) || root_path
end
private
def after_sign_out_path_for(resource)
stored_location_for(:user) || root_path
end
end
pages_controller.rb
class PagesController < ApplicationController
def redirect_to_sign_up
if signed_in?.blank?
redirect_to new_user_registration_path
else
redirect_to home_path
end
end
end
user_pages_controller.rb
class UserPagesController < ApplicationController
before_filter :authenticate_user!
def home
end
def profile
end
end