2012-11-05 132 views
0

我從開始時給出的默認值生成Mvc4應用程序。Mvc應用程序(默認情況下)用戶註冊

我需要將修改後的UserProfile存儲在我的數據庫中,所以我已經更改了UserProfile類來滿足我的需求,並且還更改了RegisterModel類。現在,當我註冊某個人時,我有一個正確的視圖以及所有必要的字段,但是,當我打開服務器資源管理器進行檢查時,我得到一個UserProfile表,其中只有UserId和UserName(但通過模型還應該有firstname,姓氏,電子郵件等)。

爲了正確存儲,應該修改什麼?

回答

0

我幾個月前在同一個地方。其中一個問題是,註冊故事並不完全是開箱即用的。例如,如果有人先註冊,然後鏈接他們的外部帳戶,他們可以結束多個配置文件。

我在成功登錄時從webpages_OAuthMembership表中提取用戶標識。

如果(OAuthWebSecurity.Login(result.Provider,result.ProviderUserId,createPersistentCookie:真)){

  var oAuthMembership = new EndeavorODataEntities().webpages_OAuthMembership 
       .Where(u => u.ProviderUserId == result.ProviderUserId) 
       .FirstOrDefault(x => x.Provider == result.Provider) ?? 
       new webpages_OAuthMembership 
         { 
          Provider = result.Provider, 
          ProviderUserId = result.ProviderUserId, 
         }; 

      TempData.Add("OAuthMembership", oAuthMembership); 
      HttpContext.Response.Cookies.Add(new HttpCookie("UserId", oAuthMembership.UserId.ToString(CultureInfo.InvariantCulture))); 

      return RedirectToAction("Summary", new { Controller = "Member", id = oAuthMembership.UserId.ToString(CultureInfo.InvariantCulture) }); 

從這裏,我做我的自定義單獨調用 '會員' 另一個控制器上表因爲我將所有應用程序數據都存儲在與此OAuthMember表單獨的數據庫中。在我以前使用ASP.NET Membership Provider數據庫的經驗中,我始終將它作爲獨立於應用程序的數據庫保留下來,並將其重用於多個應用程序。當然,如果你想修改UserProfile或其他表,就像你從上面的代碼中看到的那樣,這只是一個LINQ語句。沒有什麼可以說你不能在這裏執行到UserProfiles表的連接。

在上面的這個例子中,我創建了一個edmx文件OAuthMembership.edmx,並從SQL中導入我的表,就像任何其他數據庫一樣。 EndeavorODataEntities是我的連接字符串的名稱,webpages_OAuthMembership是實際成員表的名稱。

我已經添加了一些其他我可以幫助你的資源。

http://blogs.msdn.com/b/webdev/archive/2012/08/22/extra-information-from-oauth-openid-provider.aspx

http://blogs.msdn.com/b/pranav_rastogi/archive/2012/08/23/plugging-custom-oauth-openid-providers.aspx

http://blogs.msdn.com/b/webdev/archive/2012/08/24/customizing-the-login-ui-when-using-oauth-openid.aspx

http://blogs.msdn.com/b/webdev/archive/2012/09/12/integrate-openauth-openid-with-your-existing-asp-net-application-using-universal-providers.aspx

http://blogs.msdn.com/b/webdev/archive/2012/09/19/configuring-your-asp-net-application-for-microsoft-oauth-account.aspx

http://blogs.msdn.com/b/rickandy/archive/2012/08/15/initializesimplemembership-attribute-and-simplemembership-exceptions.aspx

+0

釷是我的第一個應用程序,所以我想保持簡單。我現在編輯了本地數據庫的連接,因此我想將產品和用戶存儲在那裏。我陷入了一陣混亂。我應該在ActionResult ExternalLoginCallback中編輯代碼並將其放在那裏? EndeavorODataEntities()和webpages_OAuthMembership是什麼意思? – asdewka

+0

把代碼放在控制器的ActionResult(或者從ActionResult調用的一個單獨的私有方法中)是非常好的,所以是把它放在那裏。將所有表放在同一個數據庫中沒有任何壞處,特別是如果這是您的第一個應用程序。有關詳細信息,請參閱上面的擴展答案 –

+0

感謝您的幫助!我會看看這些博客 – asdewka