ユーザーが Facebook 経由でログインできるようにする MVC 4 Web サイトを構築しています。これらはすべて、すぐに使える魅力のように機能します。
しかし今、私は Facebook からユーザーの誕生日を取得することに行き詰まっています。Nuget から最新バージョンの Facebook C# SDK (6.1.4) をインストールしました。user_birthday の許可を要求するように Facebook でアプリをセットアップしました。ログイン ダイアログのプレビューを見ると、誕生日が権限のリストに表示されています。
MVC アプリケーションを実行し、自分の Facebook アカウントを介してログインすると、応答で誕生日が返されますが、別のアカウントを使用してログインするとすぐに誕生日が返されず、ユーザーが許可できるログイン ダイアログもありません。誕生日フィールドを使用するアプリの許可。以下は、私の ExternalLoginCallback() アクションの完全なコードです。
[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
if (!result.IsSuccessful)
{
return RedirectToAction("ExternalLoginFailure");
}
// Get the Facebook access token
if (result.ExtraData.Keys.Contains("accesstoken"))
{
Session["facebooktoken"] = result.ExtraData["accesstoken"];
}
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;
var client = new FacebookClient(Session["facebooktoken"].ToString());
dynamic response = client.Get("me", new { fields = "gender, birthday" });
return View("ExternalLoginConfirmation",
new RegisterExternalLoginModel
{
UserName = result.UserName,
FullName = result.ExtraData["name"],
DateOfBirth = DateTime.ParseExact(response["birthday"], "MM/dd/yyyy", CultureInfo.InvariantCulture),
ExternalLoginData = loginData
});
}
}
ここで私が間違っていることを誰かが教えてくれることを願っています。私は 2 日間 Google で検索しましたが、どういうわけか正しい答えを見つけることができませんでした。それとも、私はそれを理解するのが愚かなだけなのかもしれません。
どんな助けでも大歓迎です。
エルウィン