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

sessionRails에 내장되어 있습니다. 기본적으로 쿠키를 사용하여 요청 사이에 클라이언트의 상태를 유지합니다. 자세한 내용은 guides.rubyonrails.org/security.html#sessions 를 참조하세요.
Erik Peterson

2
참고 :이 답변을 읽는 경우 return unless session[:user_id]Zach의 답변에 표시된대로 포함해야합니다. 그렇지 않으면 로그 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

1
sessionparams여러 요청에 대해 지속된다는 점을 제외하면 일종의 유사 합니다. 이를 사용하여 개별 사용자에게 고유 한 모든 종류의 영구 매개 변수를 저장할 수 있습니다 (세션이 만료되거나 로그 아웃 할 때까지). 여기에서 더 많은 것을 읽을 수 있습니다 : ActionController : Accessing the Session
Zach Kemp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.