2011-07-20 16 views
5

La mia app crea automaticamente un account utente ospite. Il problema è che l'utente ospite potrebbe voler accedere all'account reale.w Devise, come consentire a un utente SignIn di accedere come altro utente

Desidero quindi consentire agli utenti di accedere che sono già signed_in? secondo la concezione.

Mentre posso rendere il modulo, se inviare il modulo signin, ideare calci ad un redirect:

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 

Aggiornamento

ho provato:

class SessionsController < Devise::SessionsController 

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

end 

Ma sembra escogitare la richiesta prima che colpisca anche quel metodo e il logger non sia nel file di registro

Qualche idea su come posso consentire a un utente signed_in di accedere?

+0

Come è stato possibile eseguire il rendering della pagina di accesso? Il mio direbbe "Hai già effettuato l'accesso". quando provo ad accedere a/users/sign_in – lulalala

+0

se pensi che la mia risposta sia corretta, contrassegnala come corretta! –

risposta

0

è possibile eseguire 2 azioni. Il primo si disconnette e reindirizza al secondo che avvia una nuova visualizzazione da un altro utente

+0

Giusto ma non riesco ad accedere a def create. non viene chiamato – AnApprentice

+0

hai avuto la possibilità di risolvere il problema? – Anatoly

3

Beh, se crei un account automaticamente, vuol dire che il tuo current_{resource} restituirà un utente? in tal caso è normale che ti reindirizza da route sign_in e sign_up (se vedi il codice sorgente c'è un prepend_before_filter :require_no_authentication).

Questo è per spiegare il reindirizzamento ... ora per risolvere il problema di dover estendere i controller e creare un filtro precedente con richiede l'autenticazione solo per utenti non ospiti.

portare l'attenzione su questo:

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

v'è la definizione di require_no_authentication, che fa un po 'più di verificare se l'utente è autenticato. quindi ci hanno fatto aggiungere un altro prima del filtro solo per guest_users

Ad esempio:

P.S. Ovunque leggi {resource} è il nome della tua classe del modello. Se Utente, quindi utente, se Profilo, profilo, attenzione al downcasing.

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 

del modello:

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

anche bisogno di cambiare il file rotte:

se il controller registrazioni si chiama come nell'esempio e se la risorsa è utente

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

Quindi fai lo stesso sul controller di sessione. con questo intendo applicare lo stesso prima dei filtri su un controller di sessioni personalizzate.

Attenzione in cui si desidera applicare il filtro precedente ed esaminare i requisiti in precedenza.

Ha aiutato?

+0

Grazie, ma sembrava che il RegistrationsController personalizzato non venga mai utilizzato durante la richiesta. – lulalala

+0

E come hai raggiunto questa conclusione? hai usato il debugger? Ma mi dispiace di aver dimenticato che devi configurare i tuoi percorsi per utilizzare il controller personalizzato. Correggerò la risposta –

+0

Inoltre fammi sapere quali passi hai preso per testarlo e se si utilizza un debugger cosa sembra accadere! –

Problemi correlati