Rails:悪名高い「current_user」はどこから来たのですか?


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 2012年

sessionRailsに組み込まれています。デフォルトでは、リクエスト間のクライアントの状態を維持するためにCookieを使用します。詳しくは、guides.rubyonrails.org / security.html#sessionsをご覧ください。
Erik Peterson、

2
注:この回答を読んでいる場合は、必ずreturn unless session[:user_id]ザックの回答に示されているように含めてください。これがないと、if current_userサインアウト中のすべてのチェックで別のデータベースクエリがトリガーされます。
DreadPirateShawn 2014

10

はい、current_user使用しsessionます。独自の認証をロールバックしたい場合は、アプリケーションコントローラで同様のことを行うことができます。

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

セッションは、ユーザーのログインステータスを制御するために一般的に使用されるコントローラー/モデルのようなものですか?それともレールに組み込まれていますか?
bigpotato 2012年

1
sessionparams複数のリクエストに対して持続することを除いて、のようなものです。これを使用して、個々のユーザーに固有のあらゆる種類の永続的なパラメーターを保存できます(セッションが期限切れになるか、ログアウトするまで)。詳細については、こちらをご覧ください。ActionController:セッションへのアクセス
Zach Kemp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.