Рейки: звідки береться сумнозвісний “поточний_користувач”?


94

Нещодавно я розглядав Rails і помітив, що на це є багато посилань current_user. Це походить лише від Devise? і чи повинен я сам визначати це вручну, навіть якщо я використовую Devise? Чи є передумови для використання current_user(наприклад, існування сеансів, користувачів тощо)?

Відповіді:


81

Він визначається кількома самоцвітами, наприклад, Devise

Вам потрібно буде десь зберігати user_id, як правило, у сеансі після входу. Це також передбачає, що у вашому додатку є і потрібні користувачі, автентифікація тощо.

Як правило, це щось на зразок:

class ApplicationController < ActionController::Base
  def current_user
    return unless session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end
end

Це передбачає наявність класу User, наприклад #{Rails.root}/app/models/user.rb.

Оновлено: уникайте додаткових запитів до бази даних, коли немає поточного користувача.


сеанси подібні до часто використовуваних контролерів / моделей з метою контролю стану входу користувачів? чи він вбудований у рейки?
bigpotato

sessionвбудовано в Rails. За замовчуванням він використовує файл cookie, щоб підтримувати стан клієнта між запитами. Для отримання додаткової інформації див. Guides.rubyonrails.org/security.html#sessions .
Ерік Петерсон,

2
ПРИМІТКА. Якщо ви читаєте цю відповідь, не забудьте включити, return unless session[:user_id]як показано у відповіді Зака, - без цього кожна if current_userперевірка під час виходу викличе інший запит до бази даних.
DreadPirateShawn

10

Так, current_userвикористовує session. Ви можете зробити щось подібне у своєму контролері додатків, якщо хочете здійснити власну автентифікацію:

def current_user
  return unless session[:user_id]
  @current_user ||= User.find(session[:user_id])
end

сеанси подібні до часто використовуваних контролерів / моделей з метою контролю стану входу користувачів? чи він вбудований у рейки?
bigpotato

1
sessionце щось подібне params, за винятком того, що воно зберігається для декількох запитів. Ви можете використовувати його для зберігання будь-якого постійного параметра, унікального для ваших індивідуальних користувачів (до закінчення сеансу або виходу з системи). Детальніше про це ви можете прочитати тут: ActionController: Доступ до сесії
Зак Кемп,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.