Laden...

[gelöst] MVC4: AllowAnonymous greift nicht!

Erstellt von Coooder vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.710 Views
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 10 Jahren
[gelöst] MVC4: AllowAnonymous greift nicht!

Hallo,
ich habe in der Web.config eine FormsAuthentication deklariert
und zwar so:

<authentication mode="Forms">
      <forms loginUrl="~/Home/Index" timeout="30" slidingExpiration="true" />
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>

damit man sich aber einloggen kann habe ich den HomeController mit

[Authorize]

belegt und die Index Action sowie die Login Action mit

[AllowAnonymous]
[AllowAnonymous]
        public ActionResult Index()
        {
            return View();
        }

 [HttpPost]
        [AllowAnonymous]
        public ActionResult Login(FormCollection fc)
        {
            [...]
            return RedirectToAction("Index");
        }

da man sich momentan auf der IndexSeite nur einloggen kann ist das auch vorrübergehen die loginUrl...

problem is jetzt nur das

[AllowAnonymous]

scheinbar ignoriert wird und er immer sofort zur LoginUrl springt mit dem ?ReturnUrl parameter in der url ...

was mach ich falsch?

16.834 Beiträge seit 2008
vor 10 Jahren

Dass er nicht greif ist unwahrscheinlich. Wahrscheinlich hast Du einen anderen Fehler, den Du selbst herausfinden kannst ([Artikel] Debugger: Wie verwende ich den von Visual Studio?).

Insgesamt ist Dein Vorgehen aber doch fraglich und alles andre als gut.*Die Home / Haupt-Index-Seite sollte kein Login sein *FormCollection ist ein Relikt aus der WebForms-Zeit und hat in MVC nichts mehr zusuchen. (=> ASP.NET MVC – Arbeiten mit View- und SubmitModels

Statt auf FormsAuthentication zu setzen würde ich den Cookie selbst schreiben (denk an die Encryption) und auch ein eigenes AuthorizeAttribute erstellen.
Dann kann man auch so sicherheitsrelevante Dinge wie IP-Bindung, Expiration, Single-Session etc umsetzen.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 10 Jahren

Insgesamt ist Dein Vorgehen aber doch fraglich und alles andre als gut.
Die Home / Haupt-Index-Seite sollte kein Login sein

FormCollection ist ein Relikt aus der WebForms-Zeit und hat in MVC nichts mehr zusuchen. (=>
>

  • ich find das jetzt nich so unüblich wenn man sich über die startseite auch einloggen kann
  • das mit den submitmodels klingt interessant ... ich habs mit mal durchgelsesn, wenn das haupt problem behoben is werd ich das mal so versuchen.

ich hab jetzt mal (zum ausprobieren) ein neues projekt erstellt(mvc4 internetanwendung)
ich dachte mir da müsste es ja klappen, dem war aber leider nich so ... ich habe lediglich

<authorization>
      <deny users="?"/>
    </authorization>

in die web.config eingefügt und

 [Authorize]
    public class HomeController : Controller
    {
        [AllowAnonymous]
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

und die beiden attribute gesetzt ... die breakpoints sagen mir jetzt auch nur das er sofort in die LoginMethode springt ... aber das wusst ich ja nun auch so

edit: ich habe gerade festgestellt das ich auch nich zum Register komme obwohl da standart mäßig schon [AllowAnonymous] gesetzt is

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 10 Jahren

ok hab herrausgefunden ...
das prob war

<authorization>
      <deny users="?"/>
    </authorization>

das einfach weg nehmen und es funzt so wie es soll ... ich meine gestern gelesen zu habe das [AllowAnonymous] den deny dann übergeht ... war wohl ne fehlinformation

16.834 Beiträge seit 2008
vor 10 Jahren

Repräsentiert die Startseite NUR die Loginform (und NICHTS anderes), oder ist das eine ganz normale Seite, wo eben oben Rechts 2 Loginfelder sind?
Egal: in beiden Fällen stellen diese Kriterien nicht die Home-Seite einer RIA dar.

In Fall 1 würde man den Inhalt aus einer Login.cshtml holen und diesen Anzeigen (wenn der User eingeloggt ist, und Home wählt - wohin wird er geleitet? Nicht sehr intuitiv!).
Ich löse das über eine eigene Url, sodass der User seine Login-Url a) als Favourite intuitiver speichern kann und b) auch via Copy / Paste nutzen kann und weis, wohin er kommt.

In Fall 2 würde man den Form-Submit auf eine andere URL leiten und mit Gewissheit kein Post des Home anbieten.
Das wäre im Übrigen laut UI-Best-Practise kein Ersatz für ein Login-Fenster, sondern nur eine Erleichterung.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 10 Jahren

Du hast natürlich recht, das is noch sehr unschön ... aber das weiss ich ja ;D
der ganze mist komm auch aus dem HomeController wieder raus ...
Doch bevor ich mich um die richtige struktur kümmere wollt ich erstma ein paar grundlegende sachen testen und dabei ist es ja nich wichtig ...

ich hab das projekt ja auch erst kürzlich angefangen und es is noch so gut wie leer ^^
aber ich danke dir für die infos, vor allem das mit der FormCollection werde ich ausbauen und mit models arbeiten

16.834 Beiträge seit 2008
vor 10 Jahren

Merk Dir eins: provisorische Lösungen sind die Umsetzungen, die man nie verändert.
Deswegen: mach Dir Gedanken, wie die Seite funktionieren soll und dann erstell Dir eine Struktur.

Wenn Du so anfängst wirst Du das nie sauber umsetzen, glaub mir.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 10 Jahren

ja da hast du wahrscheinlich nich ganz unrecht ... ich werds mir zu Herzen nehmen, danke