没有DB的应用程序:在调用“WebSecurity”类的任何其他方法之前,必须调用“WebSecurity.InitializeDatabaseConnection”方法

时间:2013-08-22 09:07:52

标签: facebook asp.net-web-api oauth-2.0 dotnetopenauth durandal

首先要做的事情。我是一个完整的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服务上使用登录/授权调用吗?

1 个答案:

答案 0 :(得分:1)

不是最愚蠢的问题。 Not by a long shot。但是您收到错误是因为您的会员提供商仍设置为使用SimpleMembershipProviderOAuthWebSecurity将使用默认会员提供商。如果您不想使用数据库,则必须创建或查找要使用的其他成员资格提供程序。

编辑: 我知道你说你无法访问数据库但是如果你可以使用SQL Compact,你可以坚持使用默认的SimpleMembershipProvider(查看Hanselman的blog)或者DevArt有SQLLite provider。此外MemFlex Project还有一个RavenDb提供程序。如果没有这些工作,我认为你可能只需要自己编写。