【问题标题】:ASP.NET MVC issue with configuration of forms authentication section表单身份验证部分配置的 ASP.NET MVC 问题
【发布时间】:2011-05-04 11:47:18
【问题描述】:

我有一个在 IIS 上运行的 ASP.NET MVC 3 Beta 应用程序。在我的web.config 中,我定义了以下负责表单身份验证的部分:

<authentication mode="Forms">
    <forms 
        loginUrl="~/Account/LogOn" 
        name=".VNK" 
        protection="All" 
        timeout="43200" 
        cookieless="UseCookies" />
</authentication>

定义的登录地址是~/Account/LogOn。

当我尝试使用以下方式获取登录网址时:

FormsAuthentication.Initialize();
string loginUrl = FormsAuthentication.LoginUrl; 

我收到:/VNK/site/Account/Login

为什么我得到的地址与web.config 中定义的地址不同?

更新:“/VNK/site/”前缀在这里不是问题。问题是FormsAuthentication 类的LoginUrl 属性不反映来自web.config 的值。这意味着如果我将 web.config 中 loginUrl 属性的值从“~/Account/LogOn”更改为例如“~/foobar”,FormsAuthentication.LoginUrl 的值仍然是“/VNK/site/Account/Login”。为什么?

【问题讨论】:

  • 尝试从您的名称属性中删除句点,即。 name="VNK"
  • @Jimmy - name 属性对这个问题完全没有影响。 name 属性只是设置包含身份验证票证的 cookie 名称的后缀。
  • 我知道,只是在黑暗中拍摄,因为其他一切看起来都不错

标签: asp.net asp.net-mvc iis asp.net-mvc-3


【解决方案1】:

波浪号 (~) 表示“我的网站的根”,因此您不必一直使用.. 或\ 来调整网站结构。但是,从 IIS 的角度来看,您的 Web 应用程序可能有一个额外的目录结构层,当您以编程方式请求 LoginUrl 时会反映出这一层。我不确定您为什么要检索 LoginUrl,正常情况下,只要用户尝试访问未经身份验证的页面,IIS 就会自动将用户重定向到 LoginUrl。

【讨论】:

  • 嘿,我知道什么是 (~),问题是我的 FormsAuthentication.LoginUrl 没有反映来自 web.config 的 loginUrl。如果我将 web.config loginUrl 从“~/Account/LogOn”更改为“~/foobar”,FormsAuthentication.LoginUrl 的值仍然为“/VNK/site/Account/Login”。为什么?
  • 您的项目是否命名为 VNK?并在本地运行?
【解决方案2】:

我认为服务器在这种情况下无法确定 ~ 的含义,请尝试为登录页面提供更直接的 url,例如 /Account/LogOn。

也许你会在这里找到有用的东西http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

【讨论】:

  • 嘿嘿,不是(~)的问题。问题是 loginUrl 根本没有反映。如果我更改超时,FormsAuthentication.Timeout 正在更改,但是当我更改 loginUrl 时,FormsAuthentication.LoginUrl 保持不变。
【解决方案3】:

我认为 ASP.NET MVC 3 Beta 中存在错误。此问题不会出现在以前版本的 ASP.NET MVC 中。

如果有人想重播这个错误,他应该遵循这个:

1.下载mvc framevork。

2.创建新的 ASP.NET MVC 3 Web 应用程序

3.在HomeController 中的About 操作上应用Authorize 属性

[Authorize]
public ActionResult About()
{
   return View();
}  

4.启动应用程序并通过点击About标签调用About动作。您将收到服务器错误,因为应用程序正在尝试将您重定向到这样的 URL:

http://localhost:[port_num]/Account/Login?ReturnUrl=%2fHome%2fAbout

显然没有登录视图。有 LogOn 视图。登录操作的 URL 在 untouched web.config 中定义:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

但应用程序并没有反映这一点。有人知道发生了什么吗?

更新:

我是对的,MVC 3 Beta 中有一个错误。来自known issues:

“有一个已知问题会导致表单身份验证始终将未经身份验证的用户重定向到 /Account/Login,而忽略 Web.config 中使用的表单身份验证设置。解决方法是添加以下应用设置。” em>

<add key="autoFormsAuthentication" value="false" />

更新 2:

Alexander Prokofyev 注意到,ASP.NET 3 RTM 正在寻找另一个设置。所以你需要这一行:

&lt;add key="loginUrl" value="~/LogOn" /&gt;

【讨论】:

  • ASP.NET 3 RTM 寻找另一个设置。所以你需要这一行:
  • @Jarek Waliszko 请用上面的评论更新你的答案——我差点错过了。
  • 还有一个额外的设置可以用于 MVC 4 &lt;add key="PreserveLoginUrl" value="true" /&gt;,它可以使用表单身份验证设置
【解决方案4】:

如果您有权访问 IIS,则追加一个新应用程序并通过双击在应用程序池部分启用 ASP.NET“集成管道”。

如果您的托管服务提供商不允许您访问 IIS, 然后登录控制面板。

  • 转到网站,在管理选项卡下 - 启用 ASP.NET 集成 管道内衬。
  • 将您的应用程序设置为虚拟目录 (它对我有用)

【讨论】:

    【解决方案5】:

    所以简单的解决方案是从 Web 项目的 Bin 文件夹中删除 WebMatrix.*.dll。我已经为我的 asp.net 项目完成了此操作,因为它将我的登录重定向到 mvc 样式 url。

    【讨论】:

    • 您应该删除 nuget 包。我让我的一名团队成员删除了 dll。但后来我们将包迁移到最新版本,该 dll 又回来了,导致问题再次出现
    【解决方案6】:

    更新了 MVC 4 的答案,大量借鉴了这个页面和Request redirect to /Account/Login?ReturnUrl=%2f since MVC 3 install on server

    <appSettings>
       ...
       <add key="PreserveLoginUrl" value="true" />
    </appSettings>
    
    ...
    
    <authentication mode="Forms">
          <forms loginUrl="~/Account/LogOn" timeout="43200" /> <!--43,200 in minutes - 30 days-->
    </authentication>
    

    【讨论】:

      【解决方案7】:

      在 appSettings 中加入以下内容:

      <add key="loginUrl" value="~/Account/LogOn" />
      

      您可以从表单身份验证配置中清空 loginUrl。

      【讨论】:

        【解决方案8】:

        我从我的 web.config 中删除了以下内容

        <remove name="FormsAuthentication" />
        

        然后一切似乎都正常了。我创建项目时默认添加了此文本。

        【讨论】:

        • 我假设您知道这个问题已在 6 年前被问过,并且指的是 ASP.NET MVC 3 Beta。
        • 是的,当然。但是一周前我在 MVC 4 上遇到了问题,当谷歌搜索答案时,这个页面仍然是最好的点击之一。所以这似乎是一个发布我的解决方案的好地方,以防其他人也遇到问题。
        猜你喜欢
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多