ASP.NET MVC issue with configuration of forms authentication section

16,815

Solution 1

I think there is a bug in ASP.NET MVC 3 Beta. This problem does not appear in previous releases of ASP.NET MVC.

If anyone wants to replay this error, he should follow this:

1.Download the mvc framevork.

2.Create new ASP.NET MVC 3 Web Application

3.Applay Authorize attribute on About action in HomeController

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

4.Start application and invoke About action by clicking on About tab. You will get server error, because application is trying to redirect You to such URL:

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

There is obviously no Login view. There is LogOn view. Url to LogOn action is defined in untouched web.config:

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

But application does not reflect that. Have anyone any clue what's going on ?

UPDATE:

I was right, there is a bug in MVC 3 Beta. From known issues:

"There’s a known issue that causes Forms Authentication to always redirect unauthenticated users to /Account/Login, ignoring the forms authentication setting used in Web.config. The workaround is to add the following app setting."

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

UPDATE 2:

Alexander Prokofyev noticed, that ASP.NET 3 RTM looks for another setting. So you need this line instead:

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

Solution 2

If you have access to IIS, then append a new application and enable ASP.NET "integrated pipelining" in application pool section by double clicking it.

If your hosting provider does not grant you access to IIS, then login to the control panel.

  • Go to websites, under the management tab- enable ASP.NET integrated pipe lining.
  • Set your application as a virtual directory (It worked for me)

Solution 3

So the simple solution was to remove WebMatrix.*.dll from Bin folder in web project. I have done this for my asp.net project since it was redirecting my login to mvc style url.

Share:
16,815
jwaliszko
Author by

jwaliszko

Updated on June 07, 2022

Comments

  • jwaliszko
    jwaliszko almost 2 years

    I have an ASP.NET MVC 3 Beta application running on IIS. In my web.config I defined following section responsible for forms authentication:

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

    The defined login address is ~/Account/LogOn.

    When I try to get the login url using:

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

    I receive: /VNK/site/Account/Login

    Why do I get a different address from the one defined in web.config?

    UPDATE: The "/VNK/site/" prefix is not a problem here. The problem is that LoginUrl property of FormsAuthentication class does not reflect the value from web.config. It means that if I change the value of loginUrl attribute in web.config from "~/Account/LogOn" to e.g. "~/foobar", FormsAuthentication.LoginUrl still has value of "/VNK/site/Account/Login". Why ?

  • jwaliszko
    jwaliszko over 13 years
    Hey, I know what is (~), the problem is my FormsAuthentication.LoginUrl does not reflect loginUrl from web.config. If I change in web.config loginUrl from "~/Account/LogOn" to "~/foobar", FormsAuthentication.LoginUrl still has value of "/VNK/site/Account/Login". Why ?
  • jwaliszko
    jwaliszko over 13 years
    Hey, it's not the problem of (~). The problem is loginUrl is not reflected at all. If I change the timeout, FormsAuthentication.Timeout is changing, but when I change loginUrl, FormsAuthentication.LoginUrl stays untouched.
  • Jimmy
    Jimmy over 13 years
    Is your project named VNK? and running locally?
  • Alexander Prokofyev
    Alexander Prokofyev about 13 years
    ASP.NET 3 RTM looks for another setting. So you need this line instead: <add key="loginUrl" value="~/LogOn" />
  • Alex
    Alex almost 12 years
    @Jarek Waliszko please update your answer with the comment above - I almost missed it.
  • Simon Halsey
    Simon Halsey over 11 years
    There's an additional setting you can use with MVC 4 <add key="PreserveLoginUrl" value="true" /> which makes it use the forms auth setting
  • jwaliszko
    jwaliszko about 8 years
    I assume you are aware that this question has been asked 6 yers ago and refers to ASP.NET MVC 3 Beta.
  • ChrisFox
    ChrisFox about 8 years
    Yes, of course. But I had the problem on MVC 4 a week ago, and when googling for an answer, this page still came up as one of the best hits. So it seemed like a good place to post my solution in case anyone else was also still experiencing problems.
  • Hrishi
    Hrishi over 7 years
    you should remove the nuget package. i had one of my team member deleted the dll. but then we migrated the package to latest version and that dll came back in which caused the issues again