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?
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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 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
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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
ja da hast du wahrscheinlich nich ganz unrecht ... ich werds mir zu Herzen nehmen, danke