Пользователь не распознается как вошедший в систему, когда приложение запускается как «Пуск без отладки», проверка подлинности пользователя работает отлично при запуске в качестве «Начать отладку» - PullRequest
0 голосов
/ 25 июня 2019

Я создал небольшое веб-приложение ASP.NET в Visual Studio 2019, начиная с шаблона проекта веб-приложения ASP.NET MVC для VB, в котором для аутентификации используются индивидуальные учетные записи пользователей по умолчанию.Я близок к завершению разработки, и где-то по пути я потерял возможность войти в свое приложение, когда я запускаю его без отладчика, подключенного через CTRL-F5: Запуск без отладки.Запуск приложения с отладчиком, подключенным через F5: Начать отладку и любой другой метод запуска, который подключает отладчик, позволяет приложению вести себя так, как ожидается.

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

Я начал отладку со старой чистой, перекомпилировать и перестроить, и мне там не повезло.Добавил оператор throw в оператор успеха метода login и проверил, что попытка входа в систему прошла успешно.Метод входа в систему с этим оператором throw (расположенный в AccountController.vb) показан ниже.Попытка входа в систему вызывает случай SignIn.Success.

' POST: /Account/Login
<HttpPost>
<AllowAnonymous>
<ValidateAntiForgeryToken>
Public Async Function Login(model As LoginViewModel, returnUrl As String) As Task(Of ActionResult)
    If Not ModelState.IsValid Then
        Return View(model)
    End If

    ' This doesn't count login failures towards account lockout
    ' To enable password failures to trigger account lockout, change to shouldLockout := True
    Dim result = Await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout := False)
    Select Case result
        Case SignInStatus.Success
            Throw New System.Exception("Sign In Succeeded") 'Throws both with and without the debugger attached
            Return RedirectToLocal(returnUrl)
        Case SignInStatus.LockedOut
            Return View("Lockout")
        Case SignInStatus.RequiresVerification
            Return RedirectToAction("SendCode", New With {
                returnUrl,
                model.RememberMe
            })
        Case Else
            ModelState.AddModelError("", "Invalid login attempt.")
            Return View(model)
    End Select
End Function

Как ни странно, невозможность войти в систему сохраняется, даже если я удаляю только два атрибута <Authorize> в проекте, которые, как я думал, будут устраненыс экрана входа в систему все вместе.(Они привязаны к классам AccountController и ManagerController, и их размещение соответствует другим проектам, которые я завершил в прошлом с использованием тех же шаблонов проектов)

Один из единственных связанных интернет-ресурсов, которые я могнайти это этот ТАК вопрос .Я собираю и развертываю на targetFramework 4.7.2, и мой файл web.config был сгенерирован шаблоном проекта, за исключением строки подключения к базе данных, но я включил ее на тот случай, если кто-то заметит что-то не так.

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=my secret token" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=very secret connection string"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2" />
    <roleManager enabled="true" defaultProvider="MySqlRoleProvider">
      <providers>
        <add name="MySqlRoleProvider"
        type="System.Web.Security.SqlRoleProvider"
        applicationName="RFIDDataEntry"
        connectionStringName="DefaultConnection"/>
      </providers>
    </roleManager>
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      ....
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

TLDR: Мое веб-приложение VB.NET не распознает пользователя, вошедшего в систему, когда приложение запускается без подключенного отладчика, даже если попытка входа в систему успешна.

...