23-05-2011, 11:55 PM
(Modification du message : 23-05-2011, 11:56 PM par Sephi-Chan.)
Hello,
La question est simple : comment faites-vous pour garder l'utilisateur connecté toujours ?
Quelle session ou quel cookie créez-vous, etc.
Voilà ma solution :
Chaque utilisateur dispose d'un authentication token unique (très important) que je génère à la création du compte. Une fois le compte crée et à chaque fois que le joueur s'authentifie, je crée un cookie nommé authentication_token dans lequel je mets ledit token (ce cookie est marqué HttpOnly).
Ensuite, mon application expose une méthode current_user qui est disponible dans les contrôleurs et les vues (mais pas dans les modèles, ça n'aurait aucun sens) que voici :
Son rôle est simple, elle vérifie que le cookie existe, si oui, elle cherche l'utilisateur qui possède ce token. Le résultat de la requête (un objet User ou nil) est mis en cache (juste pour la durée du script) dans une variable d'instance de mon contrôleur pour éviter d'avoir autant de fois la requête que d'appels à cette méthode.
Le petit bonus de cette technique : je peux déconnecter le joueur en changeant simplement son authentication token dans la base de données.
La question est simple : comment faites-vous pour garder l'utilisateur connecté toujours ?
Quelle session ou quel cookie créez-vous, etc.
Voilà ma solution :
Chaque utilisateur dispose d'un authentication token unique (très important) que je génère à la création du compte. Une fois le compte crée et à chaque fois que le joueur s'authentifie, je crée un cookie nommé authentication_token dans lequel je mets ledit token (ce cookie est marqué HttpOnly).
Ensuite, mon application expose une méthode current_user qui est disponible dans les contrôleurs et les vues (mais pas dans les modèles, ça n'aurait aucun sens) que voici :
def authentication_token
@authentication_token ||= cookies.includes?(:authentication_token) && cookies[:authentication_token]
end
def current_user
@current_user ||= authentication_token && User.find_by_authentication_token(authentication_token)
end
Son rôle est simple, elle vérifie que le cookie existe, si oui, elle cherche l'utilisateur qui possède ce token. Le résultat de la requête (un objet User ou nil) est mis en cache (juste pour la durée du script) dans une variable d'instance de mon contrôleur pour éviter d'avoir autant de fois la requête que d'appels à cette méthode.
Le petit bonus de cette technique : je peux déconnecter le joueur en changeant simplement son authentication token dans la base de données.