web-dev-qa-db-fra.com

Comment déconnecter un utilisateur de carte de la console Rails?

Les utilisateurs de mon instrument sont "database_authenticatable" et "token_authenticatable". J'ai essayé de supprimer le champ "authentication_token" dans la base de données pour cet utilisateur de la console, mais ils semblent toujours capables d'utiliser leur jeton d'authentification existant. Supprimer l'utilisateur fonctionne entièrement, mais je ne veux pas aller aussi loin.

Edit: pour plus de clarté. Je souhaite utiliser Rails console pour déconnecter un utilisateur. c’est-à-dire lancer Rails console puis une commande.

28
joseph.hainline

Devise fournit des méthodes d'assistance pour faire ces choses.

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

J'espère que cela t'aides.

15
Ankit Samarthya

Si vous utilisez Devise, vous pouvez utiliser ce qui suit dans votre console Rails . Cela fonctionne parfaitement pour moi comme dans mon application si vous utilisez seulement 1 session par compte d'utilisateur. Je stocke mes sessions dans redisDB.

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

Tout ce que je devais faire était d'effacer mon unique_session_id d'utilisateurs pour cet utilisateur et Rails le chasser de la session 

Mais pour plusieurs sessions pour le même compte d'utilisateur, cela ne fonctionne pas.

Si vous souhaitez effacer toutes les sessions utilisateur, vous pouvez effectuer les opérations suivantes depuis le terminal.

rake db:sessions:clear
1
Anto Dominic

Il semble que les jetons d'attribut sauvent des sessions: 

user.tokens = nil
user.save
0
mpz

Essayez la méthode sign_out:

sign_out @user 

Manuel d'utilisation

0
patrick

Je ne suis pas un fan du modèle sign_out @user car, du moins pour la version simplifiée que j'utilise, cela déconnecte l'utilisateur actuel, quel que soit l'argument que je lui passe. Si vous stockez des sessions dans votre base de données, procédez comme suit:

@user.update_attributes(current_sign_in_token: "")

TBH Je ne pense pas que ce soit la meilleure façon de le faire, mais c'est la meilleure façon que j'ai vue dans mes propres recherches.

0
octopushugs