0

第一件事。我是一个完整的 OAuth 新手。这将是我的第一次尝试,事情变得越来越棘手......

我正在使用 Durandal & Web API 编写单页应用程序。用户需要能够使用任何社交网络登录。我无权访问数据库,我必须调用我在服务器端使用的未受保护的第 3 方 Web 服务,并且需要使用 OAuth 进行保护。

所以我设法将文件添加到我的解决方案中,该解决方案使用 facebook 控制/按钮生成登录(创建了一个新的 MVC4 Web 应用程序,并手动复制和粘贴所有与身份验证相关的文件、更新的引导程序等),并且代码似乎在大多数情况下都有效。

当 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,为什么它需要数据库?或者我是否正确地说我可以删除/替换该代码部分,并在我正在使用的网络服务上调用登录/授权?

4

1 回答 1

1

不是有史以来最愚蠢的问题。远非遥不可及。但是您收到错误消息,因为您的会员资格提供商仍设置为使用SimpleMembershipProvider并将OAuthWebSecurity使用默认会员资格提供商。如果您不想使用数据库,则必须创建或查找要使用的其他会员提供程序。

编辑:我知道您说您无权访问数据库,但如果您可以使用 SQL Compact,您可以坚持使用默认的 SimpleMembershipProvider(查看 Hanselman 的博客)或 DevArt 有一个SQLLite 提供程序。MemFlex项目也有一个 RavenDb 提供程序。如果这些都不起作用,我认为您可能只需要编写自己的。

于 2013-08-28T15:16:03.703 回答