Rozejrzałem się ostatnio po Railsach i zauważyłem, że istnieje wiele odniesień do current_user
. Czy to pochodzi tylko od Devise? i czy muszę ręcznie definiować to samodzielnie, nawet jeśli używam Devise? Czy istnieją warunki wstępne do korzystania current_user
(takie jak istnienie sesji, użytkowników itp.)?
ruby-on-rails
bigpotato
źródło
źródło
session
jest wbudowany w Railsy. Domyślnie używa pliku cookie do utrzymywania stanu klienta między żądaniami. Więcej informacji znajdziesz na guide.rubyonrails.org/security.html#sessions .return unless session[:user_id]
co pokazano w odpowiedzi Zacha - bez tego każdeif current_user
sprawdzenie po wylogowaniu spowoduje kolejne zapytanie do bazy danych.Tak,
current_user
używasession
. Możesz zrobić coś podobnego w kontrolerze aplikacji, jeśli chcesz przeprowadzić własne uwierzytelnianie:def current_user return unless session[:user_id] @current_user ||= User.find(session[:user_id]) end
źródło
session
jest trochę jakparams
, z wyjątkiem tego, że utrzymuje się dla wielu żądań. Możesz go użyć do przechowywania dowolnego rodzaju trwałego parametru unikalnego dla poszczególnych użytkowników (do wygaśnięcia ich sesji lub wylogowania). Możesz przeczytać więcej na ten temat tutaj: ActionController: Accessing the Session