2011-01-06 153 views
1

我想認證系統進行編程,具有以下特點:如何授權用戶在執行POST操作時授權失敗時登錄?

  • 使用ASP.NET MVC2
  • 使用SQL Server
  • (想必)的基礎上的MembershipProvider
  • 用戶註冊電子郵件確認
  • 基於
  • 角色授權

..和最後但並非最不重要: - 在執行POST操作時授權失敗時,給予用戶登錄和/或註冊的機會。

最後一個功能是最具挑戰性的功能。當用戶執行POST操作(或某種其他類型的請求)並且會話超時(或由於其他原因未授權用戶)時,用戶必須重定向到登錄/註冊表單。在登錄和/或註冊過程中,請求數據(POST,GET等)的數據必須保存在某處。在用戶成功授權後,數據應該被恢復並且請求必須使用保存的數據來執行。

我想到的解決方案是請求數據被序列化並存儲在數據庫中,由某個唯一鍵標識。這個唯一的密鑰放在cookie和/或登錄/註冊表單中的隱藏字段中。當用戶成功登錄後,可以使用此鍵恢復上下文,並且可以使用此「舊」請求數據執行操作。

對我來說最棘手的是我不知道應該保存哪些數據以及如何以及如何以及在哪裏恢復上下文。我希望能夠使用像[Authorize]和Routing這樣的屬性。我想(我想)我看起來幾乎到處都是,但沒有令人滿意的結果。我希望有人能幫助我。提前致謝!

+0

這就是我所做的,除了我將數據序列化並將其放入隱藏字段,而不是將其存儲在我的數據庫中。當然,我先加密它。你想看看我的一些代碼嗎? – 2011-01-06 23:32:06

+0

我對你的代碼非常感興趣!我特別感興趣的是您在成功登錄後重新加載舊請求數據的方式。 – Dirk 2011-01-09 06:23:43

回答

0

在線購物車通常允許匿名用戶在獲得註冊/登錄之前將一些東西放入購物車。但不幸的是,我對這些技術並不熟悉,也不想給你半熟的解釋。

在另一方面,這裏有間接解決這個問題的一些常見做法:

  • 提示用戶把他們帶到一個數據錄入頁面
  • 攔截POST使用Ajax /彈出登錄窗口前先註冊
  • 提醒用戶約會話超時,並允許用戶在不離開數據錄入頁面
  • 自動保存數據錄入頁面擴展他們的會話登錄的用戶定期
  • 將大型數據輸入頁面拆分爲幾個較小的數據輸入頁面,從而減少超時的機會

希望這會有所幫助。

+0

非常感謝您提供這個相當全面的替代方案,但我寧願不使用AJAX。我想要的東西與運輸車類似,但通常可用。我看到一個購物車的例子(我認爲這是MVC音樂商店),但我寧願有一個普遍適用的練習。我使用Codeigniter(PHP MVC框架)創建了一個類似的系統,並且完美運行。我使用了Codeigniter pre_system鉤子(http://codeigniter.com/user_guide/general/hooks.html)。我想爲ASP.NET MVC類似的東西。 – Dirk 2011-01-06 21:46:55