Похоже, вы используете FB-аутентификацию с SDK, похожим на в этом примере . Если вы уверены, что me.email
содержит данные электронной почты и после перенаправления вы получаете пустые значения (обратите внимание, что я обнаружил, что вы используете TempData
для отображения результатов на странице просмотра входа в систему), возможно, вам нужно сохранить содержимое TempData
до перенаправление с использованием TempDataDictionary.Keep()
метод:
public ActionResult FacebookCallback(string code)
{
var fb = new FacebookClient();
dynamic result = fb.Post("oauth/access_token", new
{
client_id = "your_app_id",
client_secret = "your_app_secret_key",
redirect_uri = RediredtUri.AbsoluteUri,
code = code
});
var accessToken = result.access_token;
Session["AccessToken"] = accessToken;
fb.AccessToken = accessToken;
dynamic me = fb.Get("me?fields=link,first_name,currency,last_name,email,gender,locale,timezone,verified,picture,age_range");
string email = me.email;
TempData["email"] = me.email;
TempData["first_name"] = me.first_name;
TempData["lastname"] = me.last_name;
TempData["picture"] = me.picture.data.url;
// add this line to keep TempData values when passing to view
TempData.Keep();
FormsAuthentication.SetAuthCookie(email, false);
return RedirectToAction("Login", "login");
}
Причину использования TempDataDictionary.Keep()
можно найти здесь .
В качестве примечания лучше использовать строго типизированные свойства viewmodel и назначать в них все значения, хранящиеся в TempData
, чтобы избежать потери содержимого TempData
при передаче в представление:
Модель
public class FBUser
{
public string Email { get; set; }
// other properties
}
Действие контроллера (логин)
var model = new FBUser();
model.Email = TempData["email"];
// other properties assignment
// other stuff
return View(model);
View
@model FBUser
@Html.ActionLink("Login with Facebook", "Facebook", "login")
<table>
<tr>
<td>Email:</td>
<td>
<b>@Html.LabelFor(m => m.Email)</b>
</td>
</tr>
<!-- other properties -->
</table>
<!-- other stuff -->