0

В настоящее время я работаю над интрасети для моей стажировки (ученик 1-го курса). Я взял последний код стажеров и должен был отладить его/сделать некоторые настройки. До сих пор это здорово. но сейчас моя работа заключается в том, чтобы перейти от метода аутентификации Windows к форме, основанной на одном, и я довольно потерян, когда дело доходит до него. До сих пор я изменил режим проверки подлинности в моем Web.config к формам, но вот вопрос:Метод проверки подлинности формы на моей странице ASP.NET

Добавляя

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> <!-- Was in comments --> 
</authentication> 
<authorization> 
    <deny users="?" /> 
</authorization> 

к моему Web.config он перенаправляет меня на основную страницу входа, которая требует мне для ввода моей информации. (Из-за разрешения)

Но он по-прежнему отображается следующее содержимое из Site.Master:

<div class="float-right"> 
    Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %> 
</div> <!-- Should only display if logged in --> 

Как будто я все еще вошли в систему, и я мог бы изменить свой профиль.

Есть ли способ отобразить его, только когда моя аутентификация на основе формы вошла в систему?

EDIT: Кроме того, что мне нужно сделать для переноса из Windows auth. на основе формы?

EDIT2: Вот код из моего AccountController:

[Authorize] 
[InitializeSimpleMembership] 
public class AccountController : Controller 
{ 

    // 
    // GET: /Account/Login 

    [AllowAnonymous] 
    public ActionResult Login(string returnUrl) 
    { 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

    // 
    // POST: /Account/Login 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
     { 
      return RedirectToLocal(returnUrl); 
     } 

     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(model); 
    } 

    // 
    // POST: /Account/LogOff 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOff() 
    { 
     WebSecurity.Logout(); 
     //FormsAuthentication.SignOut(); 

     return RedirectToAction("Index", "Home"); 
    } 
+0

Вы проверяете, если пользователь вошел в систему, а затем показать, что код или он там без проверки? Вы видите свое имя пользователя в System.Environment.UserName? – freshbm

+0

@freshbm: Кажется, что нет подтверждения, и отображается имя пользователя. Но, похоже, она не указала имя пользователя (интрасети), но имя моей среды. – Christopher

ответ

1

Я не уверен, если вы проверяете, если пользователь вошел в приложение, чтобы показать, что часть кода. Если нет, то вы можете сначала проверить, если пользователь вошел в систему, то показать, что HTML с помощью Request.IsAuthenticated или User.Identity.IsAuthenticated:

@if(Request.IsAuthenticated) { 
<div class="float-right"> 
    Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %> 
</div> <!-- Should only display if logged in --> 
} 

или:

@if (User.Identity.IsAuthenticated) { 
    <div class="float-right"> 
     Welcome <%: System.Environment.UserName %> - <a href='<%= Url.Action("MyProfile", "Employee") %>'>My Profile</a> | <%: Html.ActionLink("Logout", "Deco", "Home") %> 
    </div> <!-- Should only display if logged in --> 
} 

Edit:

Вы должны также изменить способ входа в использование FormsAuthentication.Authenticate метод аутентификации пользователей:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid && FormsAuthentication.Authenticate(model.UserName, model.Password, persistCookie: model.RememberMe)) 
     { 
      return RedirectToLocal(returnUrl); 
     } 

     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(model); 
    } 

также в вашем методе выхода из системы FormsAuthentication.SignOut();

+0

Это останавливает отображение, но проблема в том, что, хотя он не отображает его, кажется, что я все еще зарегистрирован. (Возможно, через проверку подлинности Windows). EDIT: Это позволит мне войти, только если я выберу в Web.config, иначе он всегда перенаправляет меня на страницу входа. – Christopher

+0

Я только что добавил. – Christopher

+0

Я отредактировал ответ, это помогает? – freshbm

1

Для проверки подлинности форм вы должны использовать User.Identity.Name, чтобы получить имя пользователя для входа вошедшего в систему пользователя. Также проверьте User.Identity.IsAuthenticated, чтобы узнать, подписан ли текущий пользователь или нет.

Однако, в зависимости от того, как был создан проект, вам может потребоваться добавить код за кулисами для обработки логинов. Если вы включите аутентификацию форм при создании проекта, ASP.NET создаст его для вас, но это может быть не сделано, если проект был создан для использования проверки подлинности Windows.

Следующий учебник дает хороший обзор того, как конфигурировать и осуществлять формы аутентификации: http://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF