2011-10-20 84 views
0

在默認的用於密碼驗證的everyauth設置中,登錄和註冊頁面是不同的。我嘗試合併相應的jade文件,並在我的服務器文件中安排get/post寄存器和登錄路徑是相同的。然後我加載合併頁面,並得到以下錯誤:將express.js中的登錄和註冊頁面合併到everyauth中

500 ReferenceError:/Users/eterna/Downloads/fame/views/index.jade:8 6 |標籤(for = everyauth.password.loginFormFieldName)登錄7 | input(type ='text',name = everyauth.password.loginFormFieldName,value = userParams [everyauth.password.loginFormFieldName])> 8 | #email 9 |標籤(for = everyauth.password.emailFormFieldName)電子郵件10 |輸入(type ='text',name ='email',value = userParams ['email'])11 | #password userParams未定義。

我很明白這是錯誤的方式。是否有一個簡單的解決方案將登錄和註冊放在同一頁面上?

回答

0

考慮閱讀默認設置的代碼。不看代碼(因爲你沒有發佈它),我可以從錯誤中看到它正在跳過第7行,因爲你試圖訪問userParams,這對登錄不存在,但它確實存在用於註冊。它看起來userParams只是持有用戶輸入的字段中的輸入,所以當出現註冊錯誤時,用戶已經輸入的文本被放入表單中。 (即如果他們輸入他們的電子郵件地址,但他們的密碼太短,註冊錯誤並且仍然在輸入字段中有他們的電子郵件地址)

註冊和登錄最簡單的方法是客戶端。你可以 1)在頁面上有你的一個表單,有兩個提交按鈕 - 註冊&登錄。根據用戶點擊的內容,表單發佈到不同的入口點。

2)創建註冊和登錄選項卡,所以當你點擊註冊,您顯示的登記表格,當您單擊登錄選項卡切換到另一種形式

你可以下去做everyauth做的路徑這個邏輯通過覆蓋respondToLoginFail,所以當它試圖登錄這個人並且失敗時,它重建請求並對寄存器路徑進行一次後調用。我不會推薦它,但可以使它工作。