Ho appena iniziato a lavorare su un'app Rails 4 (4.2.3) in cui utilizzo Devise
per l'autenticazione dell'utente. Voglio che gli utenti siano in grado di giocare con l'app prima di firmare upp creando un progetto di test e accedendo come utente ospite. Quando l'utente si iscrive (o in) voglio assegnare il progetto di test al nuovo utente corrente.Rails 4 - Devise, gli utenti guest causano il blocco della catena di filtri
Ho seguito questa guida da Platformatec: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user
Creare le ospiti lavori utente, ma al momento della firma o con una sessione utente guest attiva ottengo il seguente errore:
Filter chain halted as :require_no_authentication rendered or redirected
Se Ho cancellato la mia sessione funziona. Il metodo che gestisce il mio utente guest è il seguente:
def current_or_guest_user
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
else
guest_user
end
end
Come accennato, la creazione di utenti guest sembra funzionare correttamente. Ma questa logica non succede mai:
# should delete the guest user and clear the session.
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
Sono abbastanza sicuro che la mia sessione utente guest è in conflitto con il mio nuovo utente e causa questo errore Devise (dal momento che l'utente guest non viene mai cancellato al momento della registrazione):
Filter chain halted as :require_no_authentication rendered or redirected
Il resto della logica utente guest sembra più o meno esattamente come questa guida collegata: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user. Ho anche aggiunto il codice dal paragrafo/esempio di autenticazione: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user#authentication-this-may-interfere-with-the-current_user-helper.
Qualche idea su cosa mi manca e su come posso ottenere il mio current_or_guest_user
per eliminare l'utente ospite alla registrazione e alla firma quando uso Devise?
Aggiornamento
Questo è come i miei percorsi appaiono attualmente:
devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }
root :to => 'public#index'
resources :apps
get 'users/show', to: "users#show"
get 'users', to: "users#index"
post 'guests/receive_guest', to: "guests#receive_guest"
Update 2
La guida ha la seguente dichiarazione:
When (and if) the user registers or logs in, we delete the guest user and clear the session variable.
Non spiega molto come e dove farlo. Suppongo di dover chiamare di nuovo current_or_guest_user
da qualche parte. Ma non sono sicuro di dove non sia così familiare con Devise.
Update 3
per renderlo un po 'più chiaro. Questa è la procedura che voglio raggiungere.
- L'utente crea un progetto di prova.
- Al momento della creazione del progetto di test viene creato un utente ospite e una sessione. L'utente ospite dovrebbe essere cancellato una volta che la sessione finisce o # 3.
- Se l'utente ospite si iscrive, deve accedere e il progetto di test deve essere assegnato al nuovo utente reale.
- L'utente guest deve essere eliminato.
puoi pubblicare il file 'routes.rb' per favore? –
@huzefabiyawarwala L'ho fatto ora. – Anders
Ho provato la stessa cosa che stai cercando di implementare nella mia macchina e funziona bene, quindi potrebbe esserti perso qualcosa nel codice aggiuntivo che hai scritto oltre quello di ideare. Se è possibile, rimuovi il codice precedente e pubblica i controller esatti che hai attualmente. Sarebbe più facile eseguire il debug. –