我有这个网站(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");
谢谢!
您应该使用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)
从MDSN
当用户登录时,ASP.NET将在Cookie中,让ASP.NET知道用户已经登录在随后的请求的身份验证令牌。如果persistCookie是假的,令牌有效期在用户关闭浏览器。
所以,WebSecurity.CurrentUserId只会在后续的请求非常有用。
你必须找到获取这些信息的另一种方式。
请恢复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)