2016-11-27 6 views
0

У меня проблема с моей проверкой подлинности в Интернете, я не могу войти в систему. authenticated retrurn always false Когда я всегда вхожу в систему, он отправляет меня на страницу входа. Я отлажена, и я нашел проблему httpContext.Request.IsAuthenticated всегда возвращает ложь, любую помощь .. контроллер:Проверка подлинности веб-безопасности всегда возвращается «false»

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

      WebSecurity.Login(register.UserName, register.password, true); 
      if (User.Identity.IsAuthenticated) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 

      return RedirectToAction("Index", "Contact"); 
     } 

вид:

<h2>@ViewBag.Title.</h2> 
<div class="row"> 
    <div class="col-md-8"> 
     <section id="loginForm"> 
      @using (Html.BeginForm("Login", "AccountHopital", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Utilisez un compte local pour vous connecter.</h4> 
       <hr /> 
       @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
       <div class="form-group"> 
        @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" }) 
        </div> 
       </div> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.password, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.PasswordFor(m => m.password, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.password, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

и web.config:

<system.web> 
    <membership defaultProvider="SimpleMembershipProvider"> 
     <providers> 
     <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> 
     </providers> 

    </membership> 

    <authentication mode="Forms"> 
     <!--<modules> 
     <remove name="FormsAuthentication" /> 
</modules>--> 
     <forms loginUrl="~/AccountHopital/Login" timeout="3600" /> 

    </authentication> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    </system.webServer> 

ответ

0

User.Identity.IsAuthenticated рассматривает файл cookie аутентификации клиента, чтобы определить, зарегистрирован ли пользователь или нет. Поскольку cookie проверки подлинности отсутствует, когда вы отправляете POST на ваш метод входа в систему, он всегда возвращает false. Кроме того, зачем выполнять проверку сразу после входа пользователя в систему? Проверка должна выполняться на основе метода входа GET.

public ActionResult Login(string returnUrl) 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      //already logged in - no need to allow login again!! 
      return RedirectToAction("Index", "Home"); 
     } 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

    [AllowAnonymous] 
    [HttpPost] 
    public ActionResult Login(UserProfile register) 
    { 
     //check your model state! 
     if(!ModelState.IsValid) return View(); 

     //this method returns some result letting you know if the user 
     //logged in successfully or not. You need to check that. 

     //Additionally, this method sets the Auth cookie so you can 
     //do you IsAuthenticated call anywhere else in the system 
     var loginResult = WebSecurity.Login(register.UserName, register.password, true); 

     //login failed, display the login view again or go whereever you need to go 
     if(!loginResult) return View(); 

     //Good to go, user is authenticated - redirect to where need to go 
     return RedirectToAction("Index", "Home"); 
    } 

Here is the MSDN для метода WebSecurity.Login

+0

это всегда ложь: HasUserID = ложь, Isauthenticated = ложь:/ –

+0

Если вы проверяете внутри метода POST входа, он будет. Вы должны перенаправить на другое действие для файла cookie et. и др. быть доступным. Попробуйте 1) Войти и 2) вернитесь на страницу входа, используя приведенный выше код. Опять же, вы должны иметь успешный вызов вашего метода 'WebSecurity.Login' ** И ** вам нужно перенаправить на другой запрос на использование cookie. – Tommy

+0

Я пытаюсь использовать formsauthentication.setauthcookie, и все в порядке, это проблема cookie в WebSecurity.Login. –

Смежные вопросы