Pour compenser le fait qu’il y ait eu deux articles la semaine passée, celui de cette semaine sera light ;)
Il existe plusieurs systèmes d’identifications pour les applications Rails. Mes deux préférés sont authlogic et devise. Mais clearance est pas mal non plus.

Je vais parler du premier. Lorsque vous avez implémenté votre système d’identification avec ce gem, vous vous rendrez rapidement compte qu’un même utilisateur peut être connecté plusieurs fois depuis des machines ou des navigateurs différents.
Ce base, cela peut être intéressant afin d’éviter d’avoir à redemander à vos utilisateurs de se reconnecter trop régulièrement.

Mais dans d’autres cas (ou vous désirez éviter le partage de comptes par exemple), ce n’est pas l’effet désiré.
Après avoir cherche un petit peu, j’ai posté la solution à ceci sur stackoverflow.

Dans votre modèle de session (par défaut UserSession), ajoutez le code suivant :

before_destroy :reset_persistence_token
before_create  :reset_persistence_token

def reset_persistence_token
    record.reset_persistence_token
end

Nous créons deux callbacks.
Ainsi, notre méthode reset_persistence_token sera exécutée à chaque fois que nous créons ou supprimons une session utilisateur (à chaque fois que l’utilisateur se connecte ou se déconnecte).

Cette méthode réinitialise un token qui est également situé dans la session de l’utilisateur et qui nous permet de l’identifier.
Nous sommes obligés de la définir car elle l’est à l’origine, uniquement dans le modèle User. C’est dans la session que nous désirons réinitialiser ce token.
D’ou le record.. record retourne l’utilisateur auquel nous réinitialisons le token.

Ainsi, à chaque fois que notre utilisateur se connectera ou se déconnectera de l’application, le token sera modifié.
Et nous n’aurons donc pas la possibilité d’avoir deux machines connectées avec la même session :)

 
Fork me on GitHub