Vă mulțumim pentru susținere

Implementarea aplicației "Remember me" într-o aplicație Rails

Aplicația My Rails-app are o căsuță de semnare cu o casetă de bifare "memorează-mă". Utilizatorii care verifică că caseta ar trebui să rămână conectată chiar și după închiderea browserului. Urmărind dacă utilizatorii sunt conectați prin stocarea id-ului lor în sesiunea utilizatorului.

Dar sesiunile sunt implementate în Rails ca cookie-uri de sesiune, care nu sunt persistente. Le pot face persistente:

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

Dar asta pare a fi un hack, ceea ce este surprinzător pentru o astfel de funcționalitate comună. Există o cale mai bună?

Editați

Răspunsul lui Gareth este destul de bun, dar aș dori încă un răspuns de la cineva familiarizat cu Rails 2 (datorită codului unic CookieSessionStore ).

0
adăugat editat

11 răspunsuri

Incearca asta:

  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.

Am găsit cazuri în care "selectați toate" nu a funcționat și am avut nevoie să trec prin fiecare pagină separat. Totuși, mai bine decât cred!

3
adăugat
Are WSS funcția de a selecta pagini muiltiple și de a publica împreună de la interfața Web? Cred că ar trebui să fie o funcție standard a serverului SharePoint, dar nu găsesc această funcție.
adăugat autor engtech
Nu am găsit stsadm.exe de pe calculatorul meu care a fost instalat cu SharePoint Server 2007. Trebuie să instalez orice alte instrumente suplimentare pentru a utiliza stsadm?
adăugat autor engtech
Problema acestui instrument este că trebuie să stăm împreună cu computerul care rulează serverul SP pentru a rula linia de comandă. Orice interfață web la distanță pentru aprobarea în bloc a tuturor articolelor în așteptare? Cred că ar trebui să fie o trăsătură standard a WSS, dar nu o pot afla. :-(
adăugat autor engtech
Ecran instantaneu -> i35.tinypic.com/oad8pt.png
adăugat autor engtech
Multumesc lui Alex! Am încercat, dar nu pare să vă prezint pentru aprobare mai multe elemente din "Toate documentele de proiect"? Iată un instantaneu de pe ecran, orice idee despre ce este greșit?
adăugat autor engtech
Nu vă puteți vedea screenshot-ul chiar acum din cauza firewall-ului. Cazul pe care l-ați găsit trebuie să fie cel care nu se poate face "en masse" (toate împreună) din pagina Manage Content and Structure. Sunt sigur că am văzut un instrument sau un utilitar care face acest lucru. Voi privi în curând și actualizați răspunsul dacă îl găsesc.
adăugat autor Alex Angas
OK Am găsit acest lucru pe blogul AC: andrewconnell.com/blog/articles/ & hellip; care este o comandă STSADM care va publica toate elementele dintr-o colecție de site-uri/site-uri.
adăugat autor Alex Angas
stsadm trăiește în C: \ Program Files \ Common Files \ Microsoft Shared \ extensii server web \ 12 \ BIN . Da, ai dreptate că trebuie să fie executat de pe server. S-ar putea să existe o soluție CodePlex care poate face ceea ce aveți nevoie - a se vedea ce puteți găsi! :-)
adăugat autor Alex Angas

Cred că puteți efectua o verificare în bloc folosind pagina "Gestionați conținutul și structura" (acțiuni site).

1
adăugat
Am încercat destul de mult din pagina "Gestionați conținutul și structura", dar nu pot afla cum. Apreciez dacă ai putea împărtăși pașii.
adăugat autor engtech

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.

Singura avertizare de a face acest lucru, după cum a remarcat Alex, este că SharePoint va ignora uneori solicitarea dvs. deoarece există coloane de metadate necesare care trebuie completate înainte de a putea fi înregistrate. Va trebui să actualizați valorile, apoi efectuați pașii de înregistrare în vrac de mai sus.

1
adăugat
M-am referit doar la faptul că biblioteca în care sunt stocate pot avea coloane create care necesită introducerea unui text sau o alegere dintr-o listă derulantă înainte de a putea fi verificat. Aceste coloane ar putea fi Coloane de Site sau create de un administrator doar pentru această listă.
adăugat autor Daniel Broekman
Răcoros, mulțumesc!
adăugat autor engtech
"sunt necesare coloane de metadate care trebuie completate înainte de a putea fi verificate" - ce înseamnă coloane?
adăugat autor engtech

Probabil că nu ar trebui să prelungiți durata de viață a cookie-ului de sesiune.

Deși nu se ocupă în mod special cu șinele acest articol merge într-o anumită lungime pentru a explica "amintiți- ' cele mai bune practici.

În rezumat însă ar trebui:

  • Adăugați o coloană suplimentară în tabelul de utilizatori pentru a accepta o valoare aleatoare mare
  • Setați un cookie de lungă durată pe client, care combină id-ul utilizatorului și valoarea aleatorie
  • Când începe o nouă sesiune, verificați existența cookie-ului id / value și autentificați noul utilizator dacă se potrivesc.

De asemenea, autorul recomandă invalidarea valorii aleatorii și resetarea fișierului cookie la fiecare conectare. Personal nu-mi place asta deoarece tu nu poți rămâne conectat la un site pe două computere. Aș încerca să vă asigur că funcția de modificare a parolei reseta și valoarea aleatorie, blocând astfel sesiunile pe alte mașini.

Ca o notă finală, el dă sfaturi pentru a face anumite funcții (schimbare de modificare a parolei / e-mail, etc), disponibil la sesiuni auto autentificate este bine în valoare de mai jos, dar rareori văzut în lumea reală.

0
adăugat
Acest răspuns este înșelător. Sesiunile persistente sunt sigure deoarece cookie-urile semnate furnizate de Rails sunt sigure. Există un singur motiv pentru a folosi metoda sugerată în acest răspuns, care este "nota finală": această metodă este utilă pentru a face distincția între autentificarea manuală și cea automată (prin "rețineți-mă").
adăugat autor collimarco
Am venit cu o soluție bazată pe aceasta. În loc să mă bazez pe o coloană nouă, folosesc în schimb codul Digest :: SHA512.base64digest (user.password_digest) ca token. password_digest este deja o valoare protejată, dar SHA512 o va proteja și mai mult. Apoi, stocam user_id în sesiunea care este parte a serverului, astfel încât trebuie doar să calculez SHA512 o dată pe sesiune. Aceasta va fi invalidată când parola este schimbată.
adăugat autor bradlis7
Aruncați o privire la îmbunătățirea articolului sugerat la jaspan.com/improved_persistent_login_cookie_best_practice care adaugă conceptul "serie" pentru o mai bună securitate. De asemenea, descrierea dvs. nu este corectă: 1) autorul articolului dvs. sugerează o tabelă de cartografiere unu-la-unu între utilizator și cookie, pentru a evita invalidarea constantă a datelor dvs. de conectare la comutarea computerelor (de exemplu, locul de muncă și acasă) 2) invalidarea un cookie aleatoriu nu
adăugat autor cherouvim

Aș merge la Devise pentru o soluție genială de autentificare pentru șine.

0
adăugat

M-am gândit puțin la asta și am ajuns la niște concluzii. Șuruburile sesiunii Rails sunt implicite în mod fraudulos, deci nu trebuie să vă faceți griji că un modul cookie se modifică la sfârșitul clientului.

Iată ce am făcut:

  • 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.

Când utilizatorul verifică caseta "Aminteste-mă", am setat data sesiunii [: expireson] pentru a fi conectat + 2 săptămâni. Nimeni nu poate să fure cookie-ul și să rămână autentificat pentru totdeauna sau să fie mascat ca un alt utilizator, deoarece cookie-ul sesiunii de șine este ofertant.

0
adăugat
în mod implicit cookie-urile pentru sesiuni Rails sunt doar sesiuni de browser și, prin urmare, cookie-ul este eliminat când browser-ul este închis. Cum faci primul pas în soluția ta și ce versiune de Rails folosești? "Cookie-ul pentru sesiuni este setat să fie lung (6 luni sau cam asa ceva)"
adăugat autor Nick
Am modificat valorile prestabilite pentru a face ca cookie-ul sesiunii să nu fie "doar sesiunea browserului". Acest răspuns este format acum 4 ani și configurarea / setările implicite nu se aplică versiunilor mai noi ale Rails.
adăugat autor Daniel Beardsley

Aceasta este o descriere destul de bună a experienței unui tip de a crea sesiuni persistente de 30 de zile.

AVERTISMENT: postarea pe blog este din 2006

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

0
adăugat

Pluginul restful_authentication are o bună implementare a acestui:

http://agilewebdevelopment.com/plugins/restful_authentication

0
adăugat

Rețineți că nu doriți să persistenți sesiunea, ci doar identitatea. Veți crea o sesiune proaspătă pentru aceștia atunci când se vor întoarce pe site-ul dvs. În general, trebuie doar să atribuiți un ghid GUID utilizatorului, să îl scrieți fișierului cookie, apoi să îl utilizați pentru a-l căuta atunci când se întorc. Nu utilizați numele de conectare sau codul de utilizator pentru jetoanele, deoarece acestea ar putea fi ușor de ghicit și ar permite vizitatorilor vicioși să atace conturile altor utilizatori.

0
adăugat

Aș sugera să vă uitați fie la plug-inul RESTful_Authentication, care are o implementare a acestuia, fie să schimbați implementarea pentru a utiliza RESTful Authentication_plugin. Există o explicație bună despre cum să utilizați acest plug-in la Railscasts:

railscasts # 67 restful_authentication

Iată o legătură către plugin-ul propriu-zis

restful_authentication

0
adăugat

Acest lucru a funcționat ca un farmec pentru mine:

http://squarewheel.wordpress.com / 2007/11/03 / sesiune cookie-expirare-time-în-șine /

Acum, sesiunile mele CookieStore expiră după două săptămâni, prin care utilizatorul trebuie să-și trimită din nou datele de autentificare pentru a fi conectat în mod persistent timp de încă două săptămâni.

În mod fundamental, este la fel de simplu ca:

  1. inclusiv un fișier din directorul furnizor / pluginuri
  2. setați valoarea de expirare a sesiunii în controlerul de aplicație utilizând doar o singură linie
0
adăugat