在我的asp.net mvc项目中,我将facebook身份验证添加到了我的项目中。我也将facebook用户保存在我的数据库中。我的网站有默认的asp.net身份验证系统。 当facebook用户授予我的facebook应用程序权限时,我会获取facebook用户信息,如name,id并将其保存到我的数据库中的User表中,同时为他们提供id列的新guid。然后将它们设置为如下所示进行身份验证
public ActionResult FbInit()
{
FacebookApp app = new FacebookApp();
if (app.Session != null)
{
dynamic parameters = new ExpandoObject();
parameters.fields = "id,name";
dynamic result = app.Api("me", parameters);
string id = result.id;
string name = result.name;
using (TestDbEntities context = new TestDbEntities())
{
AuthTestAjax.Models.User newUser;
if (null == (newUser = context.Users.Where(p => p.FbId == id).FirstOrDefault()))
{
newUser = new User();
newUser.Id = Guid.NewGuid();
newUser.Name = name;
newUser.FbId = id;
context.AddToUsers(newUser);
context.SaveChanges();
}
System.Web.Security.FormsAuthentication.SetAuthCookie(newUser.Id.ToString(), false);
}
}
return Json("");
}
- 我认为持久性cookie是假的,因为我不知道他们什么时候会从facebook注销。
当用户再次访问我的网站时(他也登录facebook),我希望他进行身份验证。但是我该怎么做呢?
我正在尝试设置HttpContext.Current.User,但我不确定我是否正确,请帮我解决这个问题。
我正在尝试这个。
public ActionResult AuthBox()
{
if (HttpContext.User.Identity.IsAuthenticated)
return View("AuthBox");
FacebookApp app = new FacebookApp();
if (app.Session != null)
{
HttpContext.User // <== Can I set this here to authenticate user?
return View("AuthBox");
}
return View("AnonyBox");
}
答案 0 :(得分:1)
当您的应用识别出Facebook用户时,您需要再次执行FormsAuthentication.SetAuthCookie。
FacebookApp app = new FacebookApp();
if (app.Session != null)
{
FormsAuthentication.SetAuthCookie(app.Session.Username /*Or wherever you get it*/, false);
return View("AuthBox");
}
您无法手动设置HttpContext.User。