Implémentation de "Remember me" dans une application Rails

My Rails-app dispose d'une boîte de connexion avec une case à cocher «se souvenir de moi». Les utilisateurs qui cochent cette case doivent rester connectés même après avoir fermé leur navigateur. Je vérifie si les utilisateurs sont connectés en stockant leur identifiant dans la session de l'utilisateur.

Mais les sessions sont implémentées dans Rails sous forme de cookies de session, qui ne sont pas persistants. Je peux les rendre persistants:

class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end

Mais cela ressemble à un hack, ce qui est surprenant pour une telle fonctionnalité commune. Y a-t-il une meilleure façon?

Modifier

La réponse de Gareth est plutôt bonne, mais j'aimerais toujours avoir une réponse de quelqu'un de familier avec Rails 2 (à cause de son unique CookieSessionStore ).

0
ajouté édité
Vues: 3

11 Réponses

Essaye ça:

  1. Go to Site Actions, Manage Content and Structure.
  2. Click the View menu and change to:
    • Checked Out To Me for drafts that needs to be checked in (unfortunately there is no built-in filter to check for all drafts)
    • All Draft Documents for pages to be published
    • Pending Approval for pages to be approved
  3. Click the 'select all' icon above all of the tick boxes.
  4. Click the Action menu and choose the relevant option.

J'ai trouvé des cas où 'select all' n'a pas fonctionné et j'ai dû parcourir chaque page séparément. Pourtant, mieux que rien je suppose!

3
ajouté
Est-ce que WSS fournit une fonction pour sélectionner plusieurs pages et publier ensemble à partir de l'interface Web? Je pense que cela devrait être une fonction standard du serveur SharePoint, mais je ne trouve pas cette fonction.
ajouté l'auteur engtech, source
Je n'ai pas trouvé stsadm.exe sur mon ordinateur qui a été installé avec SharePoint Server 2007. Dois-je installer des outils supplémentaires pour utiliser stsadm?
ajouté l'auteur engtech, source
Le problème de cet outil est, nous devons nous asseoir avec l'ordinateur qui exécute le serveur SP pour exécuter la ligne de commande. Toute interface Web distante pour l'approbation en bloc de tous les éléments en attente? Je pense que cela devrait être une caractéristique standard de WSS, mais je ne peux pas le savoir. :-(
ajouté l'auteur engtech, source
Instantané de l'écran -> i35.tinypic.com/oad8pt.png
ajouté l'auteur engtech, source
Merci Alex! J'ai essayé mais ne semble aucun moyen de soumettre pour l'approbation de plusieurs articles dans "tous les documents provisoires"? Voici un instantané de l'écran, des idées sur ce qui ne va pas?
ajouté l'auteur engtech, source
Impossible de voir votre capture d'écran pour le moment à cause du pare-feu. Le cas que vous avez trouvé doit être celui qui ne peut pas être fait «en masse» (tous ensemble) depuis la page Gérer le contenu et la structure. Je suis sûr que j'ai vu un outil ou un utilitaire qui fait cela. Je regarderai bientôt et mettrai à jour la réponse si je la trouve.
ajouté l'auteur Alex Angas, source
OK J'ai trouvé ceci sur le blog d'AC: andrewconnell.com/blog/articles/ & hellip; qui est une commande STSADM qui publiera tous les éléments d'une collection de sites/sites.
ajouté l'auteur Alex Angas, source
stsadm réside dans C: \ Program Files \ Fichiers communs \ Microsoft Shared \ extensions serveur web \ 12 \ BIN . Oui, vous avez raison, il doit être exécuté à partir du serveur. Il se peut qu'il existe une solution CodePlex capable de faire ce dont vous avez besoin - voyez ce que vous pouvez trouver! :-)
ajouté l'auteur Alex Angas, source

Je crois que vous pouvez effectuer un enregistrement groupé à l'aide de la page "Gérer le contenu et la structure" (actions du site).

1
ajouté
J'ai essayé pendant un certain temps de la page "Gérer le contenu et la structure", mais je ne peux pas savoir comment. Appréciez si vous pouviez partager les étapes.
ajouté l'auteur engtech, source

Jaap's answer above is right on target. Once you get into the Manage Content and Structure module, you need to navigate through the explorer-like view to the Library where the pages/documents are housed (will show in the right-pane). Once there, mark the checkboxes next to the ones you need to publish/check-in then go up to the action bar above and choose Actions-->Check-In. This will force a check-in of the content. Doing this is especially helpful for those users who bulk upload new documents through the Windows Explorer method and don't want to check-in each document one-by-one.

Le seul inconvénient à cela, comme l'a noté Alex, est que SharePoint ignorera parfois votre requête, car il faut remplir des colonnes de métadonnées avant de pouvoir les enregistrer. Vous devrez mettre à jour les valeurs, puis effectuez les étapes d'archivage en bloc ci-dessus.

1
ajouté
Je me suis juste référé à cela que la bibliothèque dans laquelle ils sont stockés pourrait avoir des colonnes créées qui nécessitent un texte entré ou un choix à partir d'une liste déroulante avant qu'ils puissent être archivés. Ces colonnes peuvent être des colonnes de site ou créées par un administrateur uniquement pour cette liste.
ajouté l'auteur Daniel Broekman, source
Cool, merci l'homme!
ajouté l'auteur engtech, source
"il y a des colonnes de métadonnées obligatoires qui doivent être remplies avant de pouvoir être enregistrées" - que voulez-vous dire par colonnes?
ajouté l'auteur engtech, source

Vous ne devriez certainement pas prolonger le cookie de session pour qu'il dure longtemps.

Bien que ne traitant pas spécifiquement des rails, cet article explique en détail 'souvenez-vous de moi ' les meilleures pratiques.

En résumé, vous devriez:

  • Ajouter une colonne supplémentaire à la table utilisateur pour accepter une grande valeur aléatoire
  • Définir un cookie de longue durée sur le client qui combine l'identifiant de l'utilisateur et la valeur aléatoire
  • Lorsqu'une nouvelle session démarre, vérifiez l'existence du cookie id / value et authentifiez le nouvel utilisateur s'ils correspondent.

L'auteur recommande également d'invalider la valeur aléatoire et de réinitialiser le cookie à chaque connexion. Personnellement, je n'aime pas cela car vous ne pouvez pas rester connecté à un site sur deux ordinateurs. J'aurais tendance à m'assurer que ma fonction de changement de mot de passe réinitialise également la valeur aléatoire, bloquant ainsi les sessions sur d'autres machines.

Pour finir, les conseils qu'il donne sur la façon de rendre certaines fonctions (changement de mot de passe / changement d'email, etc.) indisponibles pour les sessions auto-authentifiées valent la peine d'être suivies mais rarement vues dans le monde réel.

0
ajouté
Cette réponse est trompeuse. Les sessions persistantes sont sécurisées car les cookies signés fournis par Rails sont sécurisés. Il n'y a qu'une raison d'utiliser la méthode suggérée dans cette réponse, qui est "la note finale": cette méthode est utile pour distinguer entre l'authentification manuelle et automatique (via le cookie "remember me").
ajouté l'auteur collimarco, source
Je suis venu avec une solution basée sur celui-ci. Au lieu de me fier à une nouvelle colonne, j'utilise plutôt Digest :: SHA512.base64digest (user.password_digest) comme mon jeton. password_digest est déjà une valeur protégée, mais SHA512 le protégera encore plus. Je stocke alors le user_id dans la session qui est côté serveur, de sorte que je n'ai besoin de calculer SHA512 qu'une fois par session. Cela sera invalidé lorsque le mot de passe est changé.
ajouté l'auteur bradlis7, source
Jetez un oeil à l'amélioration de l'article proposé jaspan.com/improved_persistent_login_cookie_best_practice qui ajoute le concept de « série » pour meilleure sécurité. Aussi votre description n'est pas exacte: 1) l'auteur de votre article suggère un tableau de correspondance un-à-plusieurs entre utilisateur et cookie afin d'éviter d'invalider constamment votre connexion lors du changement d'ordinateur (travail et domicile) 2) l'invalidation du cookie aléatoire ne causera pas ce que vous
ajouté l'auteur cherouvim, source

J'irais pour Devise pour une solution d'authentification brillante pour les rails.

0
ajouté

J'ai réfléchi à cela et suis arrivé à quelques conclusions. Les cookies de session Rails sont inviolables par défaut, vous n'avez donc pas à vous soucier de la modification d'un cookie à la fin du client.

Voici ce que j'ai fait:

  • Session cookie is set to be long-lived (6 months or so)
  • Inside the session store
    • An 'expires on' date that is set to login + 24 hours
    • user id
    • Authenticated = true so I can allow for anonymous user sesssions (not dangerous because of the cookie tamper protection)
  • I add a before_filter in the Application Controller that checks the 'expires on' part of the session.

Lorsque l'utilisateur coche la case "Se souvenir de moi", je fixe simplement la date de la session [: expireson] à la connexion + 2 semaines. Personne ne peut voler le cookie et rester connecté pour toujours ou se faire passer pour un autre utilisateur parce que le cookie de session rails est inviolable.

0
ajouté
Par défaut, les cookies de session Rails sont uniquement des sessions de navigateur et, par conséquent, le cookie est supprimé lorsque le navigateur est fermé. Comment faites-vous la première étape de votre solution, et quelle version de Rails utilisez-vous? "Le cookie de session va durer (6 mois ou plus)"
ajouté l'auteur Nick, source
J'ai changé les valeurs par défaut pour que le cookie de session ne soit pas "session de navigateur seulement". Cette réponse date d'il y a 4 ans et la configuration / les valeurs par défaut peuvent ne pas s'appliquer aux versions plus récentes de Rails.
ajouté l'auteur Daniel Beardsley, source

C'est une bonne description de l'expérience d'un gars de créer des sessions persistantes de 30 jours.

ATTENTION: le blog date de 2006

http://grahamglass.blogs.com/main/2006/05/rails_sessionsr. html

0
ajouté

Le plugin restful_authentication a une bonne implémentation de ceci:

http://agilewebdevelopment.com/plugins/restful_authentication

0
ajouté

Notez que vous ne voulez pas persister leur session, juste leur identité. Vous allez créer une nouvelle session pour eux lorsqu'ils reviendront sur votre site. En règle générale, vous attribuez simplement un GUID à l'utilisateur, l'écrivez à son cookie, puis l'utilisez pour le rechercher lorsqu'il revient. N'utilisez pas leur nom d'utilisateur ou leur identifiant d'utilisateur pour le jeton car il pourrait facilement être deviné et permettre aux visiteurs astucieux de détourner les comptes d'autres utilisateurs.

0
ajouté

Je suggère que vous jetez un coup d'oeil au plug-in RESTful_Authentication, qui a une implémentation de ceci, ou changez votre implémentation pour utiliser RESTful Authentication_plugin. Il y a une bonne explication sur la façon d'utiliser ce plug-in à Railscasts:

railscasts # 67 restful_authentication

Voici un lien vers le plugin lui-même

restful_authentication

0
ajouté

Cela a fonctionné comme un charme pour moi:

http://squarewheel.wordpress.com / 2007/11/03 / session-cookie-expiration-time-in-rails /

Maintenant, mes sessions CookieStore expirent après deux semaines, l'utilisateur doit de nouveau soumettre ses identifiants de connexion afin d'être connecté de manière persistante pendant deux semaines supplémentaires.

Basiquement, c'est aussi simple que:

  1. incluant un fichier dans le répertoire fournisseur / plugins
  2. Définir la valeur d'expiration de session dans le contrôleur d'application en utilisant une seule ligne
0
ajouté