mvc 4项目如何在使用facebook sdk登录后获得获取facebook用户电子邮件的权限
mvc 4 project how to have permissions to get facebook user email after log in using facebook sdk
我有一个带有 facebook 登录的 mvc4 项目
我想将用户电子邮件添加到用户个人资料 table
这是我的 AuthConfig 代码
OAuthWebSecurity.RegisterFacebookClient(
appId: "8919945667880789",
appSecret: "ce8e0b218047693308cb71");
这是我的 ExternalLoginCallback 代码
[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)
{
// 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
// 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(result.ExtraData["accesstoken"]);
dynamic me = client.Get("me");
string UserEmail = me.email;
var model = new RegisterExternalLoginModel { UserName = result.UserName, Email = UserEmail, ExternalLoginData = loginData };
return View("ExternalLoginConfirmation", model);
}
}
但是当我调试时我发现 UserEmail = me.email = null
我需要做什么才能从 Facebook 获取用户电子邮件???
非常感谢你的帮助
我所做的一切就是将我的 ExternalLoginCallback 代码编辑成那样
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)
{
// 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
// 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 fb = new FacebookClient(result.ExtraData["accesstoken"]);
dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
var UserEmail = myInfo.email;
//var client = new FacebookClient(result.ExtraData["accesstoken"]);
//dynamic me = client.Get("me");
//string UserEmail = me.email;
var model = new RegisterExternalLoginModel { UserName = result.UserName, Email = UserEmail, ExternalLoginData = loginData };
return View("ExternalLoginConfirmation", model);
}
}
这是获取用户邮箱的代码
var fb = new FacebookClient(result.ExtraData["accesstoken"]);
dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
var UserEmail = myInfo.email;
谢谢
var fb = new FacebookClient(result.ExtraData["accesstoken"]);
dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
var UserEmail = myInfo.email;
没关系,但是您的代码介于 if 语句之间
if(OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;== "facebook"){
code
}
我有一个带有 facebook 登录的 mvc4 项目
我想将用户电子邮件添加到用户个人资料 table
这是我的 AuthConfig 代码
OAuthWebSecurity.RegisterFacebookClient(
appId: "8919945667880789",
appSecret: "ce8e0b218047693308cb71");
这是我的 ExternalLoginCallback 代码
[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)
{
// 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
// 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(result.ExtraData["accesstoken"]);
dynamic me = client.Get("me");
string UserEmail = me.email;
var model = new RegisterExternalLoginModel { UserName = result.UserName, Email = UserEmail, ExternalLoginData = loginData };
return View("ExternalLoginConfirmation", model);
}
}
但是当我调试时我发现 UserEmail = me.email = null
我需要做什么才能从 Facebook 获取用户电子邮件???
非常感谢你的帮助
我所做的一切就是将我的 ExternalLoginCallback 代码编辑成那样
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)
{
// 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
// 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 fb = new FacebookClient(result.ExtraData["accesstoken"]);
dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
var UserEmail = myInfo.email;
//var client = new FacebookClient(result.ExtraData["accesstoken"]);
//dynamic me = client.Get("me");
//string UserEmail = me.email;
var model = new RegisterExternalLoginModel { UserName = result.UserName, Email = UserEmail, ExternalLoginData = loginData };
return View("ExternalLoginConfirmation", model);
}
}
这是获取用户邮箱的代码
var fb = new FacebookClient(result.ExtraData["accesstoken"]);
dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
var UserEmail = myInfo.email;
谢谢
var fb = new FacebookClient(result.ExtraData["accesstoken"]);
dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
var UserEmail = myInfo.email;
没关系,但是您的代码介于 if 语句之间
if(OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;== "facebook"){
code
}