Контроль входа в MVC не отображает имя пользователя после создания учетной записи перенаправления - PullRequest
1 голос
/ 21 августа 2009

Я работаю с настраиваемым поставщиком членства asp.net в сочетании с контроллером учетных записей по умолчанию, который поставляется с примером приложения asp.net MVC. Все идет гладко, за исключением одной крошечной вещи: после того, как пользователь создает учетную запись и автоматически входит в систему и перенаправляется, его имя пользователя не отображается с обычным приветственным сообщением.

Я подумал, что это может быть из-за того, что они не вошли в систему во время запроса. Как только они снова входят в систему, их имя появляется вверху, так что я не думаю, что это ошибка поставщиков членства, но я могу ошибаться.

Метод контроллера регистрации и перенаправления, который поставляется с asp.net MVC, выглядит следующим образом:

public ActionResult Register(string userName, string email, string password, string confirmPassword)
{

    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

    if (ValidateRegistration(userName, email, password, confirmPassword))
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email);

        if (createStatus == MembershipCreateStatus.Success)
        {
            FormsAuth.SignIn(userName, false /* createPersistentCookie */);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
        }
    }

    // If we got this far, something failed, redisplay form
    return View();
}

Кстати, используется аутентификация с помощью форм.

Редактировать: вот главная страница, используемая страницей указателя. Это Site.master, который поставляется с приложением MVC asp.net по умолчанию:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

    <div id="header">
        <div id="title">
            <h1>Internship Site</h1>
        </div>

        <div id="logindisplay">
            <% Html.RenderPartial("LogOnUserControl"); %>
        </div> 

        <div id="menucontainer">

            <ul id="menu">              
                <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
                <li><%= Html.ActionLink("About", "About", "Home")%></li>
            </ul>

        </div>
    </div>

    <div id="main">
        <noscript>Your browser does not support JavaScript!</noscript>
        <asp:ContentPlaceHolder ID="MainContent" runat="server" />

        <div id="footer">
        </div>
    </div>
</div>

Любая помощь и понимание высоко ценится.

Ответы [ 3 ]

3 голосов
/ 21 августа 2009

Ты прав. Причина, по которой он не показывает имя пользователя, заключается в том, что он не вошел в систему во время перенаправления на домашнюю страницу после создания учетной записи. Измените следующую строку:

FormsAuth.SignIn(userName, false /* createPersistentCookie */);

до:

FormsAuth.SignIn(userName, true /* createPersistentCookie */);
0 голосов
/ 22 декабря 2009

Обычный процесс проверки пользователя и автоматического входа в систему выглядит следующим образом:

        public ActionResult Login(string userName, string password, bool persistent, string returnUrl)
    {

        if (returnUrl != null && returnUrl.IndexOf("/user/login", StringComparison.OrdinalIgnoreCase) >= 0)
            returnUrl = null;

        if (Membership.ValidateUser(userName, password))
        {
            FormsAuthentication.SetAuthCookie(userName, persistent);

            if (!String.IsNullOrEmpty(returnUrl))
                return this.Redirect(303, returnUrl);
            else
                return this.Redirect(303, FormsAuthentication.DefaultUrl);
        }
        else
            TempData["ErrorMessage"] = "Login failed! Please make sure you are using the correct user name and password.";
        return View();
    }
0 голосов
/ 22 августа 2009

Я делаю (вместо FormsAuth.SignIn ())

if (Provider.ValidateUser(username, password)   
{  
     FormsAuth.SetAuthCookie(username, rememberMe);  
}  

где запомнить меня - это переменная, указывающая значение флажка запомнить меня (true, false)

Редактировать: Я только что увидел, что это в регистрации. Я все еще использую .SetAuthCookie, но, очевидно, я не использую .ValidateUser (в моем регистрационном коде).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...