Подтвердить что ты не робот

Получение CurrentUserID из Websecurity непосредственно после входа в систему (С#/ASP.NET)

У меня есть этот сайт (С#/ASP.NET) с формой, в которой пользователь может зарегистрироваться для учетной записи (это шаблон по умолчанию VS11), и после того, как все будет заполнено, и пользователь нажимает для регистрации, он создает учетная запись и журналы пользователя (что отлично работает).

После этого шага я хочу получить UserID, который ему был назначен, но он не работает. Я поставил там точку останова, чтобы увидеть значения "currentuserid" и "WebSecurity.CurrentUserId", но они имеют только значение -1. Следующим шагом будет переход на следующую страницу, и на этой странице эти функции будут работать. Я думал, что смогу получить UserID, так как пользователь уже зарегистрировался в первой строке кода, представленного здесь.

Итак, мой вопрос: почему он здесь не работает? Я очень не люблю это, поэтому я, очевидно, что-то пропустил.

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");

Спасибо!

4b9b3361

Ответ 2

из mdsn

Когда пользователь входит в систему, ASP.NET устанавливает токен аутентификации в cookie, который позволяет ASP.NET знать о последующих запросах, в которых пользователь вошел в систему. Если persistCookie имеет значение false, токен действителен только до тех пор, пока пользователь закрывает браузер.

Таким образом, WebSecurity.CurrentUserId будет полезен только при последующих запросах.

Вам придется найти другой способ получить эту информацию.

Ответ 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();
            }
.......