1

的Rails僅用於現場確認檢查是否有在請求相應的_confirmation場。導軌 - 確認字段被綁定到HTML表單helper

爲了進一步解釋,這裏是一個示例Rails視圖:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 

    <%= f.label :email %> 
    <%= f.email_field :email, autofocus: true %> 

    <%= f.label :password %> 
    <%= f.password_field :password, autocomplete: "off" %> 

    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 

    <%= f.submit "Sign up" %> 

<% end %> 

這種形式按預期工作。

但是,如果你刪除:

<%= f.label :password_confirmation %> 
<%= f.password_field :password_confirmation, autocomplete: "off" %> 

密碼不再確認。

我遇到的問題是我所有的JSON請求正在成功,沒有相應的_confirmation字段。

該請求是成功的:

{ 
    "email": "[email protected]", 
    "password" : "somepassword" 
} 

這不是:

{ 
    "email": "[email protected]", 
    "password" : "somepassword", 
    "password_confirmation": "_somepassword 
} 

此外,對於第二JSON,如果passwordpassword_confirmation匹配,則請求是成功的(其被理解)。

我認爲第一個請求不應該成功,因爲沒有密碼確認。

這是一個錯誤或確認以來的場預期的行爲應該從傭工被捆綁到的ActiveRecord,而不是HTML。

然後,如何在基於Rails的JSON API中複製字段確認?

+0

這有什麼用的形式幫助 - 它只是validates_confirmation_of'的'的行爲,允許爲零。對於API來說,這是一種明智的做法。密碼確認只是幫助用戶確保他按預期鍵入密碼(有點煩人)。它沒有實際的安全價值。 – max

回答

1

我認爲,確認的驗證是一種無用以JSON API的情況下。你基本上只會驗證開發者閱讀你的API描述。

所以我認爲這是有道理的,如果確認鍵缺少它不驗證。由於表單總是返回兩個字段,因此它總是會驗證用戶輸入。

如果你真的要執行確認(甚至在JSON API)只要按照docs

注意:此檢查僅password_confirmationnil執行。爲了要求確認,確保添加存在確認的確認屬性:

validates_presence_of :password_confirmation, if: :password_changed?