我在一個項目中玩弄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對象而不是使用User.new?什麼是「消毒」?),然後詢問serialize_options在做什麼以及爲什麼。 基本上,我可以通過完全跳過這兩種方法來從BDD角度複製相同的功能,這導致我相信價值在於他們提供的某種安全性,我只是不明白。 – Bryce