Diese Frage bezieht sich auf ASP.NET Forms-Authentifizierung ohne Redirect aber ich kann es nicht zum Laufen bringen. MVC 2 änderte seine Skriptdateien und sie sind jetzt bekommen, wie hier aufgeführt:
http://www.asp.net/ajaxlibrary/CDNAjax4.ashx
Jetzt tappe ich noch im Dunkeln, aber durch Versuch und Irrtum habe ich mich auf folgende Punkte beschränkt
MicrosoftAjax.js
MicrosoftAjaxCore.js
MicrosoftAjaxComponentModel.js
MicrosoftAjaxSerialisierung.js
MicrosoftAjaxNetwork.js
MicrosoftAjaxWebServices.js
MicrosoftAjaxApplicationServices.debug.js
Das Problem ist, dass ich jetzt die Javascript-Ausnahme erhalte:
Microsoft JScript-Laufzeitfehler: Sys.InvalidOperationException: Der Pfad zum Webdienst wurde nicht festgelegt.
Von googeln um ich habe gefunden, dieser Pfad sollte "~/ScriptServices_AuthenticationService.asmx" sein, aber etwas wie tun:
Sys.Services._AuthenticationService.DefaultWebServicePath = "~/ScriptServices_AuthenticationService.asmx";
funktioniert nicht (ich gehe davon aus, dass es sich um ein privates Mitglied handelt). Also, die Frage, weiß jemand, wie man Ajax / async FormsAuth arbeiten? Gibt es eine endgültige Anleitung, welche js-Datei verschiedene MS ajax Dienste abhängen? Schließlich, wenn keiner der oben genannten, gibt es eine Möglichkeit, FormsAuth auf der Server-Seite zu tun, so dass es nicht umleiten (so kann ich nur die Controller-Aktion mit einem Ajax-Formular aufrufen)? ... Ich habe versucht, mit FormsAuthentication.SetAuthCookie(), aber das schien nicht für mich zu arbeiten.
Bearbeiten: Ich habe herausgefunden, dass FormsAuthentication.SetAuthCookie() tatsächlich funktioniert, aber es erfordert den Response-Stream geschlossen werden (wenn, natürlich, der Puffer gesendet wird und die Cookies gesetzt sind). Dies funktioniert nicht für mich, da das zu spät für meine Zwecke ist.
Bearbeiten: Die vollständige Beschreibung für das, was ich versuche, kann notwendig sein. Das Ajax-Formular, das ich habe, ist für die Erstellung eines neuen Kontos. Auf der Serverseite erstelle ich das Konto und melde mich an. Am Frontend warte ich auf das Ajax-Abschluss-Ereignis und leite dann mein Anmeldeassistenten-Formular auf die nächste Seite weiter, die durch andere Registrierungsschritte führt. Im Pseudocode sieht die Controller-Aktion wie folgt aus:
public JsonResult CreateAsync(LoginForm form)
{
CreateAccount(form);
FormsAuthentication.RedirectFromLoginPage(form.Email, false);
return Json(
new
{
Email = form.Email,
Name = form.Name,
Message = "Success"
});
}
Die Anmeldemethode beendet den Antwortstrom, und dann gerät der clientseitige Ajax durcheinander. Ich habe versucht, FormsAuth.SetAuthCookie stattdessen aber hat die Probleme wie oben beschrieben.