2012-07-23 82 views
0

我正在嘗試爲網站創建註冊頁面。註冊過程分爲兩個階段:使用Play將信息從一個頁面傳輸到另一個頁面2

  1. 用戶在頁面上的表單上輸入他們的姓名,電子郵件,密碼。他們點擊下一步,然後

  2. 用戶在新頁面上輸入附加信息(可能上傳照片,無論),然後點擊提交。

所有這些信息(來自第1頁和第2頁)然後用於創建新用戶。如何將信息從一個頁面存儲到另一個頁面?

可以工作的一種方法可能是在第二頁的表單中創建額外的字段,並填充第一個字段的信息,但看起來有點冒失。有推薦的方法去解決它嗎?

回答

3

你並不需要使用Form.class與用戶的每個互動,這是很好的幫手,但...只是幫手。

把你的註冊過程中幾個動作,每個將負責編輯模式

  1. 你的第一個中的一部分 - 默認視圖應該是最大的,應該使用Form.classConstraints註解驗證數據。當然,你需要額外的動作,如new/createedit/update等。發送完該表後,該帳號保存在DataBase中,以便在其他操作中對其進行更改,以便通過唯一ID進行標識。
  2. 你的下一個視圖(讓我們說,這只是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,另外您可以添加簡單的領域,如registrationStepregistrationId(隨機散列),用於在所有需要的註冊步驟之間識別新用戶。您將在完整註冊過程後刪除會話數據,同時您可以通過簡單檢查步驟號來檢查用戶是否完成註冊。

+0

「不要在會話數據中保存用戶名和密碼,導致一些聰明人可以用它來對付他的老闆......」你可以擴展嗎? – 2012-07-23 20:16:02

+0

這是一個相當假設的情況:老闆開始註冊並同時決定離開辦公室,因爲會話範圍數據存儲在Cookie中,僱主可以用老闆寫的'boss1'作爲通行證,用螢火蟲檢查cookie。之後當老闆完成註冊後,僱主將能夠登錄他的賬戶。只存儲唯一的ID以找到正在進行的註冊,將避免此類危險。 – biesior 2012-07-23 20:37:24

1

我會這樣做的方式是創建User對象,並在第一個表單提交後立即將其存儲在數據庫中,因爲如果它太麻煩,這會讓用戶稍後再回來。

如果您不介意丟失無國籍狀態,也可以使用session()臨時存儲它。

session("username", USERS_CHOSEN_NAME); 
session("password", USERS_CHOSEN_PASSWORD); 
+2

我不推薦在註冊步驟之間的'session scope'中存儲密碼,因爲它保存在cookies中,所以可以在此期間被盜。 – biesior 2012-07-23 18:37:37

相關問題