Asp.net在代码中手动验证用户

时间:2010-11-07 23:46:05

标签: c# asp.net-mvc facebook

在我的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");
    }

1 个答案:

答案 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。