Εφαρμογή του «Να με θυμάσαι» σε μια εφαρμογή Rails

ψήφοι
46

Μου Rails-app έχει ένα σημάδι στο κουτί με ένα κουτάκι «να με θυμάσαι». Οι χρήστες που ελέγχει ότι η θέση θα πρέπει να παραμείνετε συνδεδεμένοι, ακόμη και μετά το κλείσιμο του προγράμματος περιήγησης τους. Είμαι παρακολούθηση από το αν οι χρήστες είναι συνδεδεμένοι με την αποθήκευση id τους στη συνεδρία του χρήστη.

Αλλά οι συνεδρίες εφαρμόζονται σε ράγες, όπως cookies περιόδου, η οποία δεν είναι ανθεκτικές. Μπορώ να κάνω τις επίμονες:

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

Αλλά αυτό φαίνεται σαν μια αμυχή, η οποία αποτελεί έκπληξη για μια τέτοια κοινή λειτουργικότητα. Υπάρχει καλύτερος τρόπος;

Επεξεργασία

Απάντηση Gareth είναι πολύ καλή, αλλά θα ήθελα ακόμα μια απάντηση από κάποιον εξοικειωμένο με Rails 2 (λόγω του ότι είναι μοναδικό CookieSessionStore).

Δημοσιεύθηκε 02/08/2008 στις 13:56
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
26

Δεν θα πρέπει σχεδόν σίγουρα να εκτείνεται το cookie περιόδου που θα ζήσει πολύ.

Αν και δεν ασχολούνται ειδικά με ράγες αυτό το άρθρο πηγαίνει σε κάποιο μήκος για να εξηγήσει «να με θυμάσαι» τις βέλτιστες πρακτικές.

Εν ολίγοις όμως θα πρέπει:

  • Προσθέστε μια επιπλέον στήλη στον πίνακα χρήστη να δεχτεί μια μεγάλη τυχαία τιμή
  • Ορίστε ένα μακρύ έζησε cookie στον πελάτη που συνδυάζει την ταυτότητα του χρήστη και την τυχαία τιμή
  • Όταν ξεκινά μια νέα περίοδο λειτουργίας, ελέγξτε για την ύπαρξη του id / μπισκότο αξία και την ταυτότητα του νέου χρήστη αν ταιριάζουν.

Ο συγγραφέας προτείνει, επίσης, ακυρώνοντας την τυχαία τιμή και την επαναφορά του cookie σε κάθε είσοδο. Προσωπικά δεν μου αρέσει ότι τότε δεν μπορείτε να μείνετε συνδεδεμένοι σε μια τοποθεσία σε δύο υπολογιστές. Θα έχουν την τάση να βεβαιωθείτε ότι η λειτουργία κωδικού πρόσβασης αλλαγή μου την επαναφορά και την τυχαία τιμή κλειδώνοντας έτσι τις συνεδρίες σε άλλα μηχανήματα.

Ως τελική παρατήρηση, η συμβουλή που δίνει σε κάνει ορισμένες λειτουργίες (αλλαγή αλλαγή του κωδικού πρόσβασης / e-mail κλπ) δεν είναι διαθέσιμη για την αυτόματη γνησιότητα συνεδρίες είναι καλά αξίζει τον παρακάτω αλλά σπάνια στον πραγματικό κόσμο.

Απαντήθηκε 02/08/2008 στις 17:10
πηγή χρήστη

ψήφοι
10

Έχω περάσει λίγο χρόνο για να σκεφτόμαστε αυτό και ήρθε σε κάποια συμπεράσματα. Ράγες cookies συνεδρίας είναι απαραβίαστο από προεπιλογή, έτσι μπορείτε πραγματικά δεν χρειάζεται να ανησυχείτε για ένα cookie που τροποποιείται για το τέλος του πελάτη.

Εδώ είναι αυτό που έχω κάνει:

  • cookie περιόδου λειτουργίας έχει οριστεί να είναι μακράς διάρκειας (6 μήνες ή έτσι)
  • Μέσα στο κατάστημα συνόδου
    • Μια «λήγει την» ημερομηνία που έχει οριστεί για να συνδεθείτε + 24 ώρες
    • ταυτότητα χρήστη
    • Επικυρωμένο = true ώστε να μπορώ να επιτρέπει την ανώνυμη sesssions χρήστη (δεν είναι επικίνδυνη λόγω της παραβίασης προστασίας μπισκότο)
  • Μπορώ να προσθέσω μια before_filter στον ελεγκτή εφαρμογής που ελέγχει το «λήγει στις» μέρος της συνεδρίασης.

Όταν ο χρήστης ελέγχει το πλαίσιο «Να με θυμάσαι», απλά ρυθμίστε την συνεδρία [: expireson] ημερομηνία που θα συνδεθείτε + 2 εβδομάδες. Κανείς δεν μπορεί να κλέψει το cookie και μείνετε συνδεδεμένοι πάντα ή μεταμφιέζονται σε έναν άλλο χρήστη, επειδή το cookie ράγες συνεδρία είναι απαραβίαστο.

Απαντήθηκε 16/09/2008 στις 22:37
πηγή χρήστη

ψήφοι
9

Θα έλεγα ότι είτε ρίξετε μια ματιά στο RESTful_Authentication plug in, το οποίο έχει εφαρμογή αυτού του γεγονότος, ή απλά να αλλάξετε την εφαρμογή σας για να χρησιμοποιήσετε την ξεκούραστη Authentication_plugin. Υπάρχει μια καλή εξήγηση για το πώς να χρησιμοποιήσετε αυτό το plug in στο Railscasts:

railscasts # 67 restful_authentication

Εδώ είναι μια σύνδεση με το ίδιο το plugin

restful_authentication

Απαντήθηκε 17/09/2008 στις 15:17
πηγή χρήστη

ψήφοι
5

Το plugin restful_authentication έχει μια καλή εφαρμογή του παρόντος:

http://agilewebdevelopment.com/plugins/restful_authentication

Απαντήθηκε 06/08/2008 στις 22:30
πηγή χρήστη

ψήφοι
3

Θα πάμε για να επινοούν μια λαμπρή λύση ελέγχου ταυτότητας για ράγες.

Απαντήθηκε 16/01/2011 στις 05:26
πηγή χρήστη

ψήφοι
3

Σημειώστε ότι δεν θέλετε να επιμένουν συνεδρία τους, μόνο την ταυτότητά τους. Θα δημιουργήσουμε μια νέα συνεδρία για να τους όταν επιστρέψουν στην περιοχή σας. Σε γενικές γραμμές απλά ορίσετε ένα GUID για το χρήστη, γράφουν ότι με μπισκότο τους, στη συνέχεια, χρησιμοποιήστε το για να τους δούμε όταν θα έρθει πίσω. Μην χρησιμοποιείτε το όνομα χρήστη ή το όνομα χρήστη για την συμβολική, όπως θα μπορούσε εύκολα να μαντέψει και να επιτρέψει μάγκας επισκέπτες να επισκιάσουν τους λογαριασμούς άλλων χρηστών.

Απαντήθηκε 01/09/2008 στις 22:46
πηγή χρήστη

ψήφοι
3

Αυτό είναι ένα πολύ καλό write-up από ένα παιδιά την εμπειρία της δημιουργίας των 30 ημερών επίμονη συνεδρίες.

ΠΡΟΣΟΧΗ: blog post είναι από το 2006

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

Απαντήθηκε 03/08/2008 στις 02:53
πηγή χρήστη

ψήφοι
2

Αυτό λειτούργησε σαν μια γοητεία για μένα:

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

Τώρα συνεδρίες CookieStore μου λήγει μετά από δύο εβδομάδες, σύμφωνα με την οποία ο χρήστης θα πρέπει να υποβάλουν εκ νέου τα διαπιστευτήρια σύνδεσής τους, ώστε να είναι διαρκώς συνδεδεμένοι για άλλες δύο εβδομάδες.

Bascially, είναι τόσο απλό όσο:

  1. των οποίων το ένα αρχείο στο πωλητής / plugins κατάλογο
  2. σύνολο συνεδρία αξία λήξης ελεγκτή εφαρμογή που χρησιμοποιεί μόνο μία γραμμή
Απαντήθηκε 20/09/2008 στις 09:58
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more