Rejestracja - logowanie -> problem z hasłem

Witam,
mój problem polega na tym, że nie potrafię sobie poradzić z hashowaniem hasła. Czytałam już inny wątek na tym forum (http://www.rubyonrails.pl/forum/p5961-2008-07-08-21:11:25) i oto co udało mi się spłodzić na jego podstawie:

require ‘digest/md5’

class Admin < ActiveRecord::Base
attr_accessor :pass
attr_protected :crypted_pass

    HUMANIZED_ATRIBUTES = {
	:login =>  "Login",
	:pass => "Hasło",
	:mail => "E-mail",
}

def self.human_attribute_name(attr)
	HUMANIZED_ATRIBUTES[attr.to_sym] || super
end

before_save :crypt_pass	

   /* w tym miejscu są tylko ograniczenia, co do długości i poprawności loginu, hasła i e-mailu - zwykła walidacja */


validates_confirmation_of :pass, :message => " różni się od potwierdzenia"

private

def self.md5(password)
	Digest::MD5.hexdigest(password)
end


def crypt_pass
	crypted_pass = self.class.md5(pass) unless pass.blank?
end

end

W rezultacie w bazie (mysql) nie zapisuje się hasło, albo zapisuje się hasło zerowej długości. Po rejestracji, nowy użytkownik zostaje automatycznie zalogowany i widoczne są dla niego wszystkie opcje, dostępne po zalogowaniu. I wszystko byłoby ok, z tym, że po wylogowaniu, nie mogę się ponownie zalogować na to nowo utworzone konto. Wyrzuca błąd, że jest niepoprawny login lub hasło. Domyślam się, że szkopuł tkwi z haśle.

I tutaj moje pytanie: Jak mam się dobrać do tego zahashowanego hasła w bazie żebym mogła się zalogować? Czy przy logowaniu też trzeba hashować hasło żeby porównać je z tym z procesu rejestracji?

Za wszelką pomoc będę bardzo wdzięczna. :slight_smile:

po co? authlogic to to czego potrzebujesz nie wymyślaj koła na nowo a już w ogóle polecam załatwić wszytsko jednym poleceniem

./script/generate nifty_authentication --authlogic --haml

i po bolu

oczywiście musisz miec generator od rayan

wszystko masz w filmikach.

http://railscasts.com/episodes/209-introducing-devise - polecam!

Warto raz napisać logowanie samemu, tak jak stara się to zrobić kolega. Moim zdaniem wartość edukacyjna takiego przedsięwzięcia jest spora: uczysz się tego co jest podstawą działania wszystkich innych mechanizmów typu authlogic i devise. Więc polecam kontynuowanie zabawy. Nasz praktykant coś takiego pisał w ramach wprawki, jutro sprawdzę czy to się do czegoś nadaje i jeśli tak to umieszczę tu kod.

Dlatego fajny jest restful_authentication do pierwszego projektu: dostajesz kod w “swoim” modelu i możesz go potem czytać oraz przerabiać.

Właśnie się zabieram za przygodę z authlogic, ale takie pytanie od razu: czy zapewnia to hashowanie hasła w bazie?

pewnie, że zapewnia :slight_smile:

Udało się. :slight_smile: Devise załatwiło sprawę. Dziękuję za pomoc.

Ale jeszcze jedno pytanko związane z rejestracją: Chciałabym żeby przy rejestracji użytkownicy podawali dodatkowo jakiś kod, ciąg znaków. (Chodzi mi to, żeby nie każdy mógł się zarejestrować, tylko osoby znające ten kod, który dostałyby od admina. A kod taki znajdowałby się np w bazie, miałby osobną tabelę, wypełnioną np czteroznakowymi ciągami liczb i cyfr, i po użyciu jednego z tych kodów stawałby się on już nieaktywny.) Jest może jakaś gotowa metoda do tego, czy raczej muszę sama kombinować z bazą?

Wielkiego kombinowania z tym nie ma. Tworzysz model RegistrationToken, przy rejestracji sprawdzasz, czy token podany przez użytkownika istnieje,

  • jeśli tak i jeśli tworzony użytkownik jest valid, to usuwasz token i tworzysz użytkownika
  • jeśli nie - odmawiasz rejestracji

Dzięki za radę, popróbuję.

Za to mam inny problem. Elementy utworzone poprzez Devise stworzyły tylko widoki, można dorobić do nich wspólnego kontrolera? Bo chciałabym dla nich zrobić wspólny layout pobierający inne dane z bazy, ale nie mam gdzie przekazać parametrów.
Podobny problem mam z logowaniem, wszystko działa ok, jeśli odnoszę się do tego wygenerowanego automatycznie, a chciałabym zrobić logowanie w górnym prawym rogu strony, dostępne z każdej podstrony. Jak robiłam “własne” logowanie, to nie było z tym żadnego problemu, a teraz jak kopiuję dane z automatycznie utworzonego logowania do wspólnego layoutu to wyskakuje mi błąd, mówiący o tym, że nie można znaleźć podanych parametrów (np. resource_name, którego nie widzę nawet w bazie).