我想我正在尝试在项目中混合使用两个提供程序,但我希望将websecurity与我的表单身份验证结合使用。我需要使用Facebook和google进行OAUTH身份验证的websecurity。
我尝试使用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);
}
答案 0 :(得分:3)
可能与我MVC4 ExtendedMembershipProvider and entityframework相同的问题有关 ..我删除了通用提供程序nuget包,这个特殊错误消失了。
Jon Galloway的这篇"very recent"文章也可以提供帮助。
答案 1 :(得分:1)
如果您使用的是Visual Studio,您可能希望省去所有这些工作。 MVC 4 Internet模板附带四个外部身份提供商。我已经测试了它们,Google帐户,Microsoft帐户,Facebook登录和Twitter登录都可以正常工作,零代码行!
我认为Web表单模板也提供了相同的功能。
答案 2 :(得分:0)
您可以使用ExtendedMembershipProvider
的实现。例如:内置SimpleMembershipProvider
。
每个ExtendedMembershipProvider
是A MembershipProvider
。