我正在尝试使用facebook connect在我的ASP.NET MVC应用程序中验证用户。 我写了控制器获取facebook access_token,facebook用户的电子邮件,然后使用以下方式验证用户:
FormsAuthentication.SetAuthCookie(loggedUserEmail, true);
在所有这些之后我将用户重定向到主页面,在那里我尝试获取User.Identity.Name以显示已登录用户的名称(在这种情况下,它将是我猜的电子邮件)。 不幸的是,User.Identity.Name为null。 但是,身份验证过程似乎可以正常工作,因为Request.IsAuthenticated返回true ...
@if (Request.IsAuthenticated) {
<p>
@* ###THIS LINE THROWS EXCEPTION AS User.Identity.Names IS NULL### Hello, @Html.ActionLink(User.Identity.Name, "ChangePassword", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Change password" })!*@
@Html.ActionLink("Log off", "LogOff", "Account")
</p>
}
为什么没有启动User.Identity.Name的任何想法? 谢谢,
巴特
P.S。 而不是
FormsAuthentication.SetAuthCookie(loggedUserEmail, true);
我也试过
var authCookie = FormsAuthentication.GetAuthCookie(loggedUserEmail, true);
var ticket = FormsAuthentication.Decrypt(authCookie.Value);
// We want to change the expiration of our forms authentication cookie
// to match the token expiration date, but you can also use your own expiration
DateTime expiration = ticket.IssueDate.AddSeconds(facebookTokenExpirationSeconds);
var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name,
ticket.IssueDate, expiration,
ticket.IsPersistent, facebookName);
// Encrypt the cookie again
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
// Manually set it (instead of calling FormsAuthentication.SetAuthCookie)
Response.Cookies.Add(authCookie);
但它也不会使User.Identity.Names
包含任何内容......
答案 0 :(得分:0)
也许我认为,重定向页面后访问令牌已过期。
答案 1 :(得分:0)
我不相信在下一个请求发出之前将设置身份。我在过去通过手动将HttpContext.Current.User设置为我在执行登录逻辑后从Forms Auth票证创建的IPrincipal来解决这个问题。
这样的事情(你的里程可能会有所不同):
var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var ticket = FormsAuthentication.Decrypt(authCookie.Value);
var identity = new GenericIdentity(ticket.Name);
var principal = new GenericPrincipal(identity, null);
HttpContext.Current.User = principal