首先要做的事情。我是一个完整的OAuth新手。这将是我第一次尝试,事情变得毛茸茸......
我正在使用Durandal& amp;编写单页应用程序。 Web API。 用户需要能够使用任何社交网络登录。 我无法访问任何数据库,我必须调用一个不受保护的第三方Web服务,我使用服务器端,并且需要使用OAuth进行保护。
所以我设法将文件添加到我的解决方案中,该解决方案使用facebook contol / button生成登录(创建了一个新的MVC4 Web应用程序,并手动复制并粘贴了所有auth相关文件,更新了bootstrappers等。 。),代码似乎在很大程度上起作用。
当facebook重定向回
时 [AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(this.Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
if (!result.IsSuccessful)
{
return this.RedirectToAction("ExternalLoginFailure");
}
if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
{
return this.RedirectToLocal(returnUrl);
}
//code removed for brevity ....
}
一旦下一行尝试执行,我就会收到指定的错误。
OAuthWebSecurity.Login(result.Provider,result.ProviderUserId,createPersistentCookie:false)
我已从控制器中删除了[InitializeSimpleMembership]属性,因为我没有数据库。
如果这是最愚蠢的问题,请原谅我,但是......
为什么登录失败?我的意思是,在那一点上,不是应用程序试图登录Facebook,为什么它需要一个数据库?或者我说我可以删除/替换该代码部分,我正在使用的Web服务上使用登录/授权调用吗?
答案 0 :(得分:1)
不是最愚蠢的问题。 Not by a long shot。但是您收到错误是因为您的会员提供商仍设置为使用SimpleMembershipProvider
而OAuthWebSecurity
将使用默认会员提供商。如果您不想使用数据库,则必须创建或查找要使用的其他成员资格提供程序。
编辑: 我知道你说你无法访问数据库但是如果你可以使用SQL Compact,你可以坚持使用默认的SimpleMembershipProvider(查看Hanselman的blog)或者DevArt有SQLLite provider。此外MemFlex Project还有一个RavenDb提供程序。如果没有这些工作,我认为你可能只需要自己编写。