次のコードを使用してFacebookでログインしようとしていますが、ユーザーの電子メールアドレスを取得できません。私は何かを欠いている?FacebookClientでユーザーの電子メールを取得できません
ここFacebookOAuthResultを返しasp.net MVCアクションメソッドを要求している。
public ActionResult FacebookStartLogin(string returnUrl)
{
if (!this.Config.AuthenticationProviders.Facebook.IsDefined)
{
return ResultHelper.ForbiddenResult(this);
}
var oAuthClient = new FacebookOAuthClient();
oAuthClient.AppId = this.Config.AuthenticationProviders.Facebook.ApiKey;
oAuthClient.RedirectUri = new Uri(Request.Url, Url.Action("FacebookFinishLogin", "Authentication"));
var loginUri = oAuthClient.GetLoginUrl(new Dictionary<string, object>() { { "state", Session.SessionToken } });
Session.NextUrl = returnUrl;
return new RedirectResult(loginUri.AbsoluteUri);
}
と、次のアクションメソッドは、ユーザーの詳細を取得しようとしますが、ユーザーの電子メールアドレス
public ActionResult FacebookFinishLogin(string code, string state)
{
if (!this.Config.AuthenticationProviders.Facebook.IsDefined)
{
return ResultHelper.ForbiddenResult(this);
}
FacebookOAuthResult oauthResult;
if (state == Session.SessionToken && FacebookOAuthResult.TryParse(Request.Url, out oauthResult))
{
if (oauthResult.IsSuccess)
{
FacebookClient fbClient = new FacebookClient();
dynamic result = fbClient.Post("oauth/access_token", new
{
client_id = this.Config.AuthenticationProviders.Facebook.ApiKey,
client_secret = this.Config.AuthenticationProviders.Facebook.SecretKey,
redirect_uri = new Uri(Request.Url, Url.Action("FacebookFinishLogin", "Authentication")),
code = code
});
fbClient.AccessToken = result.access_token;
dynamic facebookUser = fbClient.Get("me?fields=id,name,first_name,last_name,about,link,birthday,timezone,email");
User user = _service.GetByProviderId(AuthenticationProvider.Facebook, facebookUser.id);
if (user == null)
{
//Its a new user for the application
user = SecurityHelper.CreateUser(facebookUser);
user = _service.Add(user, AuthenticationProvider.Facebook, facebookUser.id);
}
//Log the user in
Session.User = new UserState(user, AuthenticationProvider.Facebook);
if (!User.MobileNoVerified)
return Redirect(Url.Action("VerifyMobile", "Users"));
return Redirect(Session.NextUrl);
}
return ResultHelper.ForbiddenResult(this);
}
else
return ResultHelper.ForbiddenResult(this);
}
の取得に失敗した応答では、我々はFBによって共有されるが、電子メールでは共有されない他のパラメータを見ることができる。ここにデバッグ出力イメージがあります: Debug output
をあなたが使用しているAPIや言語の詳細は明らかです。また、エラーなしで診断する方法はありません。あなたが他人にこれを理解させたいなら、あなたはそれらに資源を与える必要があります。正しい字下げも標準と見なされます。 – jStaff
こんにちはJstaff ..私はFacebook API 2.4でC#を使用しています。デバッグ応答イメージも添付されています。 –
恐ろしいほうがいいよ – jStaff