5

我发现了很多帖子和文章,其中包含有关如何配置 MVC 4 应用程序以与任何社交网络提供商集成以及如何验证用户身份的非常详细的信息,但下一步是什么?例如,如何获取有关经过身份验证的用户的任何信息?我想到的最简单的任务是如何获取有关经过身份验证的用户的一些信息 - 名字、姓氏、头像的 url、朋友列表等?

更新:

  1. 这是一些分享一些亮点的帖子文章
  2. 有用的文章如何与 Facebook 互动
4

1 回答 1

7

OAuth 仅用于身份验证,即获取访问令牌。获得此访问令牌后,您可以使用它从服务提供商处检索此信息。请查阅提供商的文档以了解如何做到这一点。

您可能会检索到一些声明,例如 FirstName 和 LastName,因为它们是标准的并且大多数提供商都支持它们。例如,在ExternalLoginCallback回调中,您可以尝试从result.ExtraData字典中检索此信息:

[AllowAnonymous]
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)
    {
        // Here you could use result.ExtraData dictionary
        string name = result.ExtraData["name"];


        // 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 });
    }
}

但是不同的提供者可能使用不同的密钥。因此,根据所使用的提供商,您必须使用正确的密钥来读取所需的信息。

于 2013-02-23T17:59:45.250 回答