특정 상황에서 hidden_field_tag와 양식이 어떻게 작동하는지 이해하기가 어렵습니다. 누군가가 나에게 설명해주기를 바랍니다.비밀 번호 재설정 양식에서 hidden_field_tag는 어떻게 작동합니까?
재설정 비밀번호의 형식은 railstutorial입니다.
내보기는 다음과 같습니다
<% provide(:title, 'Reset password') %>
<h1>Reset password</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@user, url: password_reset_path(params[:id])) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= hidden_field_tag :email, @user.email %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.submit "Update password", class: "btn btn-primary" %>
<% end %>
</div>
</div>
내 업데이트 작업 및 강한 PARAMS 방법 :
def update
if params[:user][:password].empty?
@user.errors.add(:password, "can't be empty")
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
@user.update_attribute(:reset_digest, nil)
flash[:success] = "Password has been reset."
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end
액세스 편집 작업은, 사용자가 이메일 주소를 입력 할 때 응용 프로그램이 링크를 보내 이 경로와 같은 활성화 토큰을 포함한 이메일 :
/password_resets/9Ij91DFChTeWTitNDVJfYw/edit?email=example%40railstutorial.org
사용자가이 링크를 열고 암호. 그것은 완벽하게 기능합니다. 내 질문 : 편집 동작에서 이미 사용자가 있고 내 업데이트 작업에서 명시 적으로 params[:email]
(hidden_field_tag와 함께 제공)을 사용하지 않은 경우 숨겨진 태그가 필요한 이유는 무엇입니까?
당신은 황소의 눈을 맞았습니다! 나는''update'' 액션을위한''before_action''을 가지고''params [: email]''에 의해 사용자를 찾습니다. 이것은 훨씬 더 의미가 있습니다, 감사합니다! – rwehresmann
@nic 우리가'session' 또는'cookies'를 사용할 수 있다고 말하는 것은 무엇입니까?사용자가 아직 로그인하지 않았 으면 암호를 잊어 버렸습니다. – truongnm
사용자가 로그인했는지 여부에 관계없이 세션 및 쿠키를 사용할 수 있습니다. 프로그래머가 어느쪽에 놓을 지 결정하는 것은 프로그래머의 선택입니다. –