2011-07-20 18 views
5

Mi aplicación crea automáticamente una cuenta de usuario invitado. El problema es que el usuario invitado puede querer iniciar sesión en la cuenta real.w Diseñar, cómo permitir que un usuario de inicio de sesión inicie sesión como otro usuario

Por lo tanto, quiero dejar que los usuarios inicien sesión que ya están signed_in? de acuerdo con el diseño.

Aunque puedo reproducir el formulario, si presento la forma signin, diseñar la patea a una redirección:

Started POST "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2011-07-19 18:21:45 -0700 
    Processing by Devise::SessionsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"RE/xxx=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"1"}, "commit"=>"Sign In"} 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 102 LIMIT 1 
Redirected to http://localhost:3000/ 
Completed 302 Found in 266ms 

actualización

Traté:

class SessionsController < Devise::SessionsController 

    def create 
    Rails.logger.info 'XXXXX 2' 
    super 
    Rails.logger.info 'XXXXX 4' 
    end 

end 

Pero el dispositivo parece estar expulsando la solicitud incluso antes de que llegue a ese método y los registradores no están en el archivo de registro

¿Alguna idea sobre cómo puedo permitir que un usuario signed_in inicie sesión?

+0

¿Cómo pudiste hacer la página de inicio de sesión? El mío diría "Ya has iniciado sesión". cuando intento acceder a/users/sign_in – lulalala

+0

si crees que mi respuesta es correcta, márcala como correcta. –

Respuesta

0

puedes hacer 2 acciones. La primera se desconecta y redirige a la segunda que inicia una nueva misión por otro usuario

+0

Correcto, pero no puedo acceder a def create. no se llama – AnApprentice

+0

¿tuvo la oportunidad de resolver el problema? – Anatoly

3

bien si crea una cuenta de forma automática, ¿significa que su current_{resource} se va a volver un usuario? de ser así, es normal que el diseño lo redireccione de las rutas sign_in y sign_up (si ve el código fuente, hay un prepend_before_filter :require_no_authentication).

Eso es para explicar el redireccionamiento ... ahora para resolver su problema, tenga que ampliar los controladores y crear un filtro anterior con requerir autenticación solo para usuarios no invitados.

atención Take a esto:

En https://github.com/plataformatec/devise/blob/master/app/controllers/devise_controller.rb

existe la definición de require_no_authentication, lo que hace un poco más de verificar si se autentifica el usuario. así que conseguimos añadir otro filtro antes de guest_users

Por ejemplo:

P. S. En cualquier lugar que lea {resource} es el nombre de su clase de modelo. Si es usuario, entonces usuario, si perfil y luego perfil, atención a la eliminación.

class RegistrationsController < Devise::RegistrationsController 
    before_filter :require_no_authentication, :unless => :guest_user?, :only => [:new,:create, :cancel] 
    before_filter :require_no_authentication_for_guests, :if => :guest_user?, :only => [:new,:create, :cancel] 

    private 

    def guest_user? 
    current_{resource}.is_guest? 
    end 

    def require_no_authentication_for_guests 
    assert_is_devise_resource! 
    end 
end 

En su modelo:

Class {resource} 
    def is_guest? 
    # here you put the code that distinguishes a guest user which should return true if its one> 
    end 
end 

también tienen que cambiar el archivo de rutas:

si su controlador de registros se llama igual que en el ejemplo y el si el recurso es usuario

devise_for :users, :controllers => {:sessions => "sessions", 
            :registrations => "registrations"} 

Luego haces lo mismo en tu controlador de sesiones. con esto quiero aplicar lo mismo antes de los filtros en un controlador de sesiones personalizado.

Atención donde quiere aplicar el filtro anterior y examinar sus requisitos antes.

¿Le fue útil?

+0

Gracias, pero parece que RegistrosControlador personalizado nunca se usa durante la solicitud. – lulalala

+0

¿Y cómo llegó a esa conclusión? usaste el depurador? Pero lamento haber olvidado que tienes que configurar tus rutas para usar el controlador personalizado. Corregiré la respuesta –

+0

. También déjenme saber qué pasos tomó para probarla y si está utilizando un depurador, ¿qué parece suceder? –

Cuestiones relacionadas