프로젝트에서 Devise로 놀고 있는데, 어떻게 작동하는지 더 잘 이해하려고합니다. 특히 세션 컨트롤러는 내가 이해할 수없는 몇 가지 일을하고 있습니다.Rails + Devise - 세션 컨트롤러 설명
class Devise::SessionsController < ApplicationController
def new
# What benefit is this providing over just "resource_class.new"?
self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
# What is "serialize_options" doing in the responder?
respond_with(resource, serialize_options(resource))
end
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
...
protected
...
def serialize_options(resource)
methods = resource_class.authentication_keys.dup
methods = methods.keys if methods.is_a?(Hash)
methods << :password if resource.respond_to?(:password)
{ :methods => methods, :only => [:password] }
end
def sign_in_params
devise_parameter_sanitizer.sanitize(:sign_in)
end
end
이 방법들은 일종의 보안을 추가한다고 가정합니다. 나는 그들이 정확히 무엇으로부터 보호하고 있는지 정확히 알고 싶다.
첫 번째 의견은'self.resource ='부분 또는'(sign_in_params)'부분에 대해 묻고 있습니까? 두 번째 주석의 경우, "serialize_options가하는 일"은 무엇을 의미합니까? 또는 "serialize_options가 응답자에게 전달되는 이유는 무엇입니까?" – carols10cents
(sign_in_params) 부분에 대해 물어볼 것입니다. (왜 User.new를 사용하는 대신 새 User 객체를 삭제합니까?) "sanitize"는 무엇을 의미합니까?) 그런 다음 serialize_options가 수행하는 작업과 그 이유를 묻습니다. 기본적으로 두 가지 방법을 모두 건너 뛰어도 BDD 관점에서 동일한 기능을 복제 할 수 있습니다.이 값은 내가 이해하지 못하는 일종의 보안에 있다고 믿을 수 있습니다. – Bryce