2015-03-09 13 views
22

I miei utenti di dispositivo sono "database_authenticatable" e "token_authenticatable". Ho provato a eliminare il campo "authentication_token" nel database per quell'utente dalla console, ma sembra che siano ancora in grado di utilizzare il loro token di autenticazione esistente. Eliminare l'utente funziona completamente, ma non voglio arrivare a tanto.Come posso disconnettere un utente di dispositivo dalla console di Rails?

Modifica: per chiarezza. Voglio utilizzare la console console per disconnettere un utente. Esegui rails console e poi qualche comando.

risposta

16

Devise fornire metodi di supporto per fare queste cose.

user = User.find(params[:id]) 
sign_in user 
sign_out user 

Spero che questo aiuti.

+4

Dal momento che sto utilizzando la console * *, non ho quei metodi. Quando eseguo il comando sign_in ottengo '' 'NoMethodError: metodo non definito' sign_in 'per main: Object''' –

+0

Dalla console puoi provare questo: '>> ApplicationController.allow_forgery_protection = false'' >> app.post ('/users/sign_in ', {"user" => {"email" => "[email protected]", "password" => "password"}}) ' –

+1

Firma * fuori *, non in. –

-3

Si può essere in grado di utilizzare gli aiutanti che altri hanno detto dopo aver incluso il modulo necessario:

include Devise::Controllers::SignInOut

fonte: Module: Devise::Controllers::SignInOut

C'è anche un'altra domanda SO dove qualcuno condivide un metodo che doesn comportare l'uso degli aiutanti Devise here.

+0

Ottengo '' 'NameError: costante non inizializzata Devise :: Controllers :: SignInOut''' –

+0

Suppongo che la libreria debba essere richiesta per prima. Puoi provare a 'require' devise'' e poi a 'include'? Non sono sicuro del nome file corretto da richiedere, quindi continuerò a dare un'occhiata a – sixty4bit

+0

Ho anche modificato la mia risposta per includere un collegamento a una domanda SO simile con una risposta contrassegnata corretta. È per l'accesso piuttosto che per l'uscita ma dovrebbe essere un processo simile se si vuole provare in questo modo (sta facendo un post al percorso '/ signout' con le informazioni sul proprio utente come parametri) – sixty4bit

-4

è possibile creare un collegamento al logout in Views-> layouts-> application.html.erb come: -

<= link_to 'Log Out', destroy_user_session_path, method: :delete %> 

Ha funzionato per me - spero lo fa anche per gli altri.

+0

la domanda è di disconnettersi dalla console – blackbiron

+0

Questo funziona solo in una visualizzazione di binari, non nella console di rails. – Francisco

0

Non sono un fan del pattern sign_out @user perché, almeno per la versione di sviluppo che sto utilizzando, che firma l'utente corrente, indipendentemente dall'argomento che ho passato. Se sei memorizzare le sessioni nel database, allora si può fare questo:

@user.update_attributes(current_sign_in_token: "") 

TBH non credo che sia il modo migliore per farlo, ma è il modo migliore che ho visto nella mia ricerca.

1

Se si utilizza Devise, è possibile utilizzare quanto segue nella console delle guide delle guide. Questo funziona perfettamente per me come nella mia app se si utilizza solo 1 sessione per account utente. Sto memorizzando le mie sessioni in redisDB.

user = User.first 
user.update_attributes(unique_session_id: "") 

Tutto quello che dovevo fare era chiaro i miei utenti unique_session_id per l'utente e le rotaie calci l'utente dalla sessione.

Ma per più sessioni per lo stesso account utente questo non funziona.

Se si desidera cancellare tutte le sessioni utente che si possono fare al di sotto dal terminal

rake db:sessions:clear 
Problemi correlati