我正在嘗試爲網站創建註冊頁面。註冊過程分爲兩個階段:使用Play將信息從一個頁面傳輸到另一個頁面2
用戶在頁面上的表單上輸入他們的姓名,電子郵件,密碼。他們點擊下一步,然後
用戶在新頁面上輸入附加信息(可能上傳照片,無論),然後點擊提交。
所有這些信息(來自第1頁和第2頁)然後用於創建新用戶。如何將信息從一個頁面存儲到另一個頁面?
可以工作的一種方法可能是在第二頁的表單中創建額外的字段,並填充第一個字段的信息,但看起來有點冒失。有推薦的方法去解決它嗎?
我正在嘗試爲網站創建註冊頁面。註冊過程分爲兩個階段:使用Play將信息從一個頁面傳輸到另一個頁面2
用戶在頁面上的表單上輸入他們的姓名,電子郵件,密碼。他們點擊下一步,然後
用戶在新頁面上輸入附加信息(可能上傳照片,無論),然後點擊提交。
所有這些信息(來自第1頁和第2頁)然後用於創建新用戶。如何將信息從一個頁面存儲到另一個頁面?
可以工作的一種方法可能是在第二頁的表單中創建額外的字段,並填充第一個字段的信息,但看起來有點冒失。有推薦的方法去解決它嗎?
你並不需要使用Form.class
與用戶的每個互動,這是很好的幫手,但...只是幫手。
把你的註冊過程中幾個動作,每個將負責編輯模式
Form.class
和Constraints
註解驗證數據。當然,你需要額外的動作,如new/create
或edit/update
等。發送完該表後,該帳號保存在DataBase中,以便在其他操作中對其進行更改,以便通過唯一ID進行標識。你的下一個視圖(讓我們說,這只是change password
形式)可以使用其他Form.class
但如果它是很容易的,具有特殊的驗證規則(如密碼怪等),你可以只使用IE。 editPassword/updatePassword
組動作和手動更新您的用戶對象:
public static Result updatePassword(Integer user_id){
User user = User.find.byId(user_id);
DynamicForm formData = form().bindFromRequest();
if (!customValidatorMethod(formData.password)){
return badRequest("Password was not changed");
}
user.password = formData.password;
user.update(user_id);
return ok("Password changed);
}
接下來,只要你想,你可以創建許多步驟。
注:不保存用戶名和密碼在會話數據,導致一些smartie可以用它對付他的老闆....而是使用在第一步中創建用戶的id
,另外您可以添加簡單的領域,如registrationStep
或registrationId
(隨機散列),用於在所有需要的註冊步驟之間識別新用戶。您將在完整註冊過程後刪除會話數據,同時您可以通過簡單檢查步驟號來檢查用戶是否完成註冊。
我會這樣做的方式是創建User對象,並在第一個表單提交後立即將其存儲在數據庫中,因爲如果它太麻煩,這會讓用戶稍後再回來。
如果您不介意丟失無國籍狀態,也可以使用session()臨時存儲它。
session("username", USERS_CHOSEN_NAME);
session("password", USERS_CHOSEN_PASSWORD);
我不推薦在註冊步驟之間的'session scope'中存儲密碼,因爲它保存在cookies中,所以可以在此期間被盜。 – biesior 2012-07-23 18:37:37
「不要在會話數據中保存用戶名和密碼,導致一些聰明人可以用它來對付他的老闆......」你可以擴展嗎? – 2012-07-23 20:16:02
這是一個相當假設的情況:老闆開始註冊並同時決定離開辦公室,因爲會話範圍數據存儲在Cookie中,僱主可以用老闆寫的'boss1'作爲通行證,用螢火蟲檢查cookie。之後當老闆完成註冊後,僱主將能夠登錄他的賬戶。只存儲唯一的ID以找到正在進行的註冊,將避免此類危險。 – biesior 2012-07-23 20:37:24