Benutzerdefiniertes Formular-Authentifizierung / Autorisierung-Schema in ASP.net MVC
Ich versuche, erstellen Sie eine benutzerdefinierte Authentifizierung Schema ASP.NET MVC mit Formular-Authentifizierung. Die Idee, dass ich vielleicht verschiedenen Bereichen auf der Website verwaltet werden - Genehmiger sind und Allgemeine user-Bereich, und diese unterschiedliche login-Seiten und so weiter. Also das ist, was ich will, geschehen.
- Benutzer Zugriff auf eingeschränkte Seite (rechts nun, ich habe es geschützt mit einem Kunden AuthorizeAttribute)
- Benutzer umgeleitet wird, um eine bestimmte login-Seite (nicht die, die von Web.config).
- Benutzer-Anmeldeinformationen überprüft wurden (über die benutzerdefinierte Datenbank-Schema) und Benutzer anmeldet.
Würde wirklich zu schätzen jede Hilfe bei diesem!!!
Dies ist, was ich was ich habe, so weit, und es funktioniert nicht:
public class AdministratorAccountController : Controller
{
public ActionResult Login()
{
return View("Login");
}
[HttpPost]
public ActionResult Login(AdministratorAccountModels.LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
if (model.UserName == "admin" && model.Password == "pass") //This will be pulled from DB etc
{
var ticket = new FormsAuthenticationTicket(1, //version
model.UserName, //user name
DateTime.Now, //create time
DateTime.Now.AddSeconds(30), //expire time
false, //persistent
""); //user data
var strEncryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
Response.Cookies.Add(cookie);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
//If we got this far, something failed, redisplay form
return View(model);
}
[AdministratorAuthorize]
public ActionResult MainMenu()
{
return View();
}
public class AdministratorAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authenCookie = httpContext.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
if (authenCookie == null) return false;
var ticket = FormsAuthentication.Decrypt(authenCookie.Value);
var id = new FormsIdentity(ticket);
var astrRoles = ticket.UserData.Split(new[] { ',' });
var principal = new GenericPrincipal(id, astrRoles);
httpContext.User = principal;
return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
var model = new AdministratorAccountModels.LoginModel();
var viewData = new ViewDataDictionary(model);
filterContext.Result = new ViewResult { ViewName = "Login", ViewData = viewData };
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwendet eine Kombination von code-vorgeschlagen von minus4 und meinen eigenen code oben können Sie dieses vereinfachte Szenario, dass vielleicht jemand anderes helfen. Ich habe einige Kommentare über Dinge, verwirrt mich zunächst.
okay, hier gehen Sie Der Code
dort haben Sie ActionFilters Ordner ( AuthAccess.cs)
Plug-in-Ordner (security.cs (verschlüsseln/entschlüsseln cookie), SessionHandler.cs (alle Angelegenheiten der login -))
Controller-Ordner (BaseController.cs und exampleController (zeigen, wie)
und die loginTable SQL-Datei.
ich mysql verwenden, so müssen Sie möglicherweise zu ändern, kann auch ich nutze subsonic-also mein Modell würde von dort kommen
und der wäre dann in den leeren Ordner Modelle.
wirklich einfach zu benutzen, lasse Sie für eine Weile, für Sie, genießen Sie die
NÖ cookie-Modell ist hier, sorry:
Ist nicht das, was Rollen sind für?
Haben Sie einen Blick auf asp.net mvc-Autorisierung mit Rollen oder haben einen Blick auf die Rollen im Allgemeinen
Griff ich diese ein, bevor ich eine Klasse, die ich für die Anmeldung
Routinen sind login, cookie Lesen, überprüfen Sie cookie und Sie haben ein Modell mit
name, email, id, userlevel
dann müssen Sie nur noch Ihre eigenen benutzerdefinierten actionFilter
z.B. [CustomAuth(MinAllowedLevel=10)]
verwende ich eine baseclass für alle meine Controller, so kann ich einfacher haben, link
alle meine session-Inhalte und kann Sie dann "get info" - wie so
werde ich bob den code morgen, wenn Sie wollen für Sie, wenn ich wieder auf die UK tagsüber
sagen 10 Stunden lasse ich, Sie haben die Klasse für alle session-Zeug und das
benutzerdefinierte Aktion filter, die Sie verwenden können, dann alles, was Sie brauchen, ist ein logins-Tabelle mit einem Feld userlevel, am besten mit Ebenen 10,20,30,40 incase müssen Sie einen level zwischen 1 und 2