私は数ヶ月前に同じ場所にいました。問題の 1 つは、登録ストーリーがそのままでは完全に完成していないことです。たとえば、誰かが最初に登録してから外部アカウントをリンクすると、複数のプロファイルを持つことになります。
ログインに成功すると、webpages_OAuthMembership テーブルからユーザー ID を取得します。
if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: true)) {
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 テーブルとは別のデータベースにすべてのアプリケーション データを保存するため、別のコントローラーのカスタム 'Membership' テーブルを個別に呼び出します。ASP.NET メンバーシップ プロバイダー データベースを使用した以前の経験では、常にそれをアプリケーションとは別のデータベースとして保持し、複数のアプリで再利用していました。もちろん、上記のコードからわかるように、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/initializessimplemembership-attribute-and-simplemembership-exceptions.aspx