Mam model użytkownika z uwierzytelnianiem.

Zaloguj się, użytkownik może zaktualizować swoje preferencje subskrypcji biuletynu (I.E. Opcja / OPTOUT)

Chciałbym jednak mieć ograniczony dostęp do strony dla użytkownika, który jeszcze nie potwierdził jego konta (przez link w e-mailu).

Nie byłby w stanie zmienić żadnych innych informacji, ale preferencje subskrypcji.

Teraz mogę teraz wypisać użytkownika z jednego biuletynu. Chciałbym mieć formę ze wszystkimi dostępnymi subskrypcjami.

Jaki byłby proces, aby to zrobić, aby zabezpieczyć? (tj. Użytkownik nie byłby w stanie zmienić wiadomości e-mail / nazwy użytkownika, aby zaktualizować innego użytkownika z podanego linku)

1
Vincent 17 luty 2017, 14:24

2 odpowiedzi

Najlepsza odpowiedź

Można wygenerować losowy SHA1 lub MD5 Hash za pomocą Ruby's Digest moduł i wstrzykiwać do linku, który wysyła, do użytkownika.

Upewnij się, że sprawdzenie hasha pasuje do e-maila użytkownika, szorstki algorytm jest następujący:

Utwórz hash dla danego użytkownika i przechowywania go w bazie danych:

user.email_hash = Digest::SHA1.hexdigest(user.email)
user.save

W metodę kontrolera obsługującej weryfikację poczty e-mail, sprawdź, czy hash pasuje do danych użytkownika

if current_user.email_hash == params[:email_hash]
  # A match, process the activation and invalidate the hash
  user.activate
  user.invalidate_hash # This can set the email_hast to nil, for example.
else
  # Someone's trying to be sneaky, or accessing an invalidated hash
end

Istnieją sposoby, aby bardziej bezpieczne, na przykład mając kombinację nazwy użytkownika i e-maila użytkownika, aby utworzyć hash, wprowadzenie punktu końcowego za limit stawki, aby zapobiec próbie brytej siły przy zgadywania skrótów itp., Ale to powinno zapewnić dobre start punkt.

Wreszcie nie zapomnij wymagać modułu digest\sha1 (require 'digest/sha1') w dowolnych plikach, które go potrzebują.

0
Muyiwa Olu 17 luty 2017, 11:49

Wzór, którego wielu biuletynów używa jest generowanie długich losowych toków i wtryskiwać je do adresów URL Link podany w e-mailu. Każde losowe mapy token do użytkownika; W ten sposób, sprawdzając parametr token, można uzyskać użytkownik powiązany z tym e-mailem.

Przykładem, Załóżmy, że strona biuletynu jest /newsletters/settings. Rzeczywisty link wysłany przez e-mail jest /newsletters/settings?code=12345678901234567890, gdzie parametr code jest inny na użytkownika, a nawet na użytkownika i Wysłano e-mail w niektórych przypadkach.

Te żetony mają jednak implikacje bezpieczeństwa. Na przykład, jeśli biuletyn jest przekazywany do innej osoby, ponieważ przesyłasz oryginalny e-mail. Jeśli nie usuwają linków, osoby trzecie mogły podszywać się oryginalnego użytkownika i zarządzanie subskrypcją.

0
danirod 17 luty 2017, 11:33