【问题标题】:WebSecurity vs FormsAuthentication in ASP.NET MVC4ASP.NET MVC4 中的 WebSecurity 与 FormsAuthentication
【发布时间】:2012-08-17 05:12:48
【问题描述】:

我想我正在尝试在项目中混合使用两个提供程序,但我希望将网络安全与我的表单身份验证结合使用。我需要使用 Facebook 和 google 进行 OAUTH 身份验证的网络安全。

当我尝试使用 facebook 登录时遇到的错误是

要调用此方法,Membership.Provider 属性必须是 ExtendedMembershipProvider 的实例。

这里是代码示例。如何同时使用两者?

public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
            if (!result.IsSuccessful)
            {
                return RedirectToAction("ExternalLoginFailure");
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return RedirectToLocal(returnUrl);
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl = returnUrl;
                return View("ExternalLoginConfirmation", new RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData });
            }
        }

public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

【问题讨论】:

    标签: asp.net-membership asp.net-mvc-4


    【解决方案1】:

    可能与我的问题相同MVC4 ExtendedMembershipProvider and entityframework .. 我删除了通用提供者 nuget 包,这个特定的错误消失了。

    Jon Galloway 的这篇 "very recent" 文章也可能有所帮助。

    【讨论】:

      【解决方案2】:

      如果您使用的是 Visual Studio,您可能希望节省所有这些精力。 MVC 4 Internet 模板带有四个开箱即用的外部身份提供程序。我已经对它们进行了测试,Google 帐户、Microsoft 帐户、Facebook 登录和 Twitter 登录都可以正常工作,零代码行!

      我认为 Web 表单模板也提供了相同的功能。

      更多信息请访问http://blogs.msdn.com/b/webdev/archive/2012/08/15/oauth-openid-support-for-webforms-mvc-and-webpages.aspx

      【讨论】:

        【解决方案3】:

        您可以使用ExtendedMembershipProvider 的实现。例如:内置的SimpleMembershipProvider

        每个ExtendedMembershipProvider 是一个 MembershipProvider

        阅读更多Jon Galloway's Blog.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-08
          • 1970-01-01
          • 1970-01-01
          • 2013-04-10
          • 2020-03-01
          • 1970-01-01
          • 2011-07-25
          相关资源
          最近更新 更多