充分利用Websecurity的CurrentUserID登录后直接(C#/ ASP.NET)(Ge

2019-07-30 04:46发布

我有这个网站(C#/ ASP.NET)有一个表单,用户可以注册一个帐号(这是VS11的默认模板),一切都充满并且用户点击注册后,它创建的帐户和日志在用户(这伟大工程)。

这一步后,我想这是他被分配了用户名,但它不工作。 我已经把一个断点同时看到“currentuserid”和“WebSecurity.CurrentUserId”的价值观,但他们只有一个值-1。 下一步是用户被重定向到下一个页面,该页面这些功能的努力。 我想我应该能够得到用户ID作为用户已经得到了在我这里提供的代码的第一行登录。

所以我的问题是,为什么不能在这里工作吗? 我很noobish这一点,所以我显然失去了一些东西。

WebSecurity.Login(username, password);
int currentuserid = WebSecurity.CurrentUserId; // This doesn't work, only returns -1
<here I wish to update other tables but I need the user ID>
Response.Redirect("~/Welcome.cshtml");

谢谢!

Answer 1:

您应该使用WebSecurity.GetUserId(用户名)

WebSecurity.Login(username, password);
int currentuserid = WebSecurity.GetUserId(username);
Response.Redirect("~/Welcome.cshtml");

看看这里: http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.getuserid(v=vs.99)



Answer 2:

从MDSN

当用户登录时,ASP.NET将在Cookie中,让ASP.NET知道用户已经登录在随后的请求的身份验证令牌。如果persistCookie是假的,令牌有效期在用户关闭浏览器。

所以,WebSecurity.CurrentUserId只会在后续的请求非常有用。

你必须找到获取这些信息的另一种方式。



Answer 3:

请恢复WebSecurity连接。 添加下面的默认控制器代码:

     public class HomeController : Controller
        {
            public ActionResult Index()
            {
                //restore WebSecurity  connection
                if (!WebSecurity.Initialized)
                WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

                ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

                return View();
            }
.......


文章来源: Getting the CurrentUserID from Websecurity directly after login (C#/ASP.NET)