Działa Zastanawiam się czy w ogole nie zrezygnować z kontrolera ‘auth’ i umieścić wszystkie akcje związane z autoryzacją użytkownika w kontrolerze members.
Po przeanalizowaniu kilku projektów, myślę że kwestię autoryzacji oraz obsługi użytkowników rozwiążę w ten sposób:
W kontrolerze “SessionController” umieszczę akcję odpowiedzialne za logowanie oraz wylogowanie użytkownika.
Natomiast kontroler “MembersController” posłuży do obsługi rejestracji, zmiany danych konta oraz innych akcji związanych z zalogowanym użytkownikiem serwisu.
Jak na razie jestem w fazie poznawania Railsów, dlatego każdy element chciałbym utworzyć samodzielnie bez korzystania z gotowych rozwiązań jak np. OAuth itp…
To weź restful_authentication – ten plugin wygeneruje Ci kod w katalogu aplikacji, bardzo dobry punkt wyjścia do własnych dalszych eksperymentów
Jak już się pobawisz, zrozumiesz i dojrzejesz do tego, że zarządzanie użytkownikami jest trudne (rejestracja, potwierdzanie mailowe rejestracji, resetowanie/przypominanie hasła, logowanie przez jednorazowy token, zapisywanie czasu i IP logowania) i nie warto za każdym razem pisać tego kodu od zera – wtedy godny polecenia jest Devise
OAuth nie ma nic wspólnego z gotowymi rozwiązaniami do autentykacji, poczytaj co to naprawdę jest
Nie mogę zrozumieć, dlaczego będąć pod adresem ‘/sessions/new’ i wysłaniu formularza pod tą samą akcją. Dostaje błąd:
No route matches “/sessions/new”
Do pliku routes.rb dopisałem
resources :sessions
Następnie utworzenie formularza w widoku akcji ‘new’:
<% form_for :sessions do |f| %>
Login: <%= f.text_field :login %><br />
Hasło: <%= f.password_field :password %><br />
<%= f.submit "Zaloguj się" %>
<% end %>
Przed wysłaniem formularza jest ok, po wysłaniu na ten sam adres dostaje błąd.
Myślałem że powyższy wpis w routes.rb załatwi sprawę.
Formularze są wysyłane do akcji create kontrolera, ścieżka /sessions
(tzn. railsy na podstawie tego, że jest to żądanie POST do ścieżki /sessions wywołują metodę create kontrolera)
Poczytaj o resource’ach i REST w Rails
BTW, no route matches /sessions/new, bo kontroler akcję new wywołuje tylko przy żądaniu GET /sessions/new (a Ty próbujesz zrobić POST /sessions/new)