MVC 4 Formes d'Authentification ne fonctionne pas avec [Autoriser]
Je suis en train d'apprendre MVC4 droit maintenant, et je suis le Pro ASP NET MVC4 4ème édition du livre pour créer un Magasin de Sports projet.
J'ai toujours développé dans les formulaires web, et je suis à essayer de comprendre comment les formes d'authentification est de travailler dans MVC4.
Voici ce que j'ai réalisé:
Web.Config
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880"/> </authentication>
AccountController Action login:
[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (authProvider.Authenticate(model.UserName, model.Password))
{
return Redirect(returnUrl ?? Url.Action("Index", "Admin"));
}
else
{
ModelState.AddModelError("", "Incorrect username or password");
return View();
}
}
else
{
return View();
}
}
Auth Fournisseur De:
public bool Authenticate(string username, string password) {
bool result = FormsAuthentication.Authenticate(username, password);
if (result)
{
FormsAuthentication.SetAuthCookie(username, false);
}
return result;
}
Je suis en train de le AuthCookie et maintenant je voudrais savoir, comment protéger les autres contrôleurs
et les actions de la AccountController
L'application dispose d'un contrôleur appelé AdminController, où vous pouvez modifier les produits et l'
liste de produits en vertu de la suite {controller/action}
Admin/Index
Donc, Si je ne suis pas missunderstanding la théorie, si l'utilisateur ne se connecte pas dans le AccountController ils ne devraient pas être en mesure d'appeler les actions avec [Autoriser] balise
sur la déclaration:
public class AdminController : Controller
{
private IProductRepository repository;
public AdminController(IProductRepository repo)
{
repository = repo;
}
[Authorize]
public ActionResult Index()
{
return View(repository.Products);
}
}
Le truc, c'est que je peux appeler l'action "Index" de l'Admin Contrôleur sans aucun problème et sans introduire de la connexion.
J'ai besoin de quelques conseils pour comprendre comment cela fonctionne. J'ai fait quelques recherches et ne pouvait pas trouver quoi que ce soit, et le livre n'est pas sur ce thème.
Merci d'avance.
EDIT: j'ai fermé le Navigateur google Chrome, et a travaillé sans rien changer. Je travaillais avec des onglets et je crois que le témoin a été actif, même à l'arrêt et le démarrage de débogage.
OriginalL'auteur Carlos Landeras | 2013-05-21
Vous devez vous connecter pour publier un commentaire.
Si l'action d'un contrôleur est décoré avec le
[Authorize]
attribut (comme l'est votreAdmin/Index
action) vous ne pouvez pas invoquer cette action si vous n'avez pas valide d'un cookie d'authentification de formulaires dans la demande.Également dans votre
Login
action, sur la réussite de l'authentification, vous ne devriez pas rendement d'un point de vue, mais vous devez rediriger loin, de sorte que le cookie est correctement installé et disponible sur les demandes ultérieures.Voici ce qui devrait se produire lorsqu'un utilisateur non authentifié tente d'accéder à l'protégé
Admin/Index
action. Le[Authorize]
attribut va jeter un 401 exception, qui comme vous le savez le classique WebForms seront interceptés par les Formes module d'Authentification et vous serez redirigé vers laloginUrl
configuré dans votre site web.config passage d'un ReturnUrl paramètre de chaîne de requête initialement demandé ressource protégée.De sorte que vous devez avoir un
Login
action sur le compte du contrôleur qui n'est pas décoré de la[HttpPost]
attribut et qui devrait servir à la vue contenant le signe-dans la vue. La demande doit ressembler à cela:Oui, vous aviez peut-être certains cookies d'authentification de formulaires à gauche à partir d'une session précédente.
Vous êtes le seul qui l'a aidé et l'a expliqué très agréable. Donc accepté de répondre. Merci beaucoup
Pouvez-vous donner des précisions sur cette nouvelle: "votre Login action, sur la réussite de l'authentification, vous ne devriez pas rendement d'un point de vue, mais vous devez rediriger loin, de sorte que le cookie est installé correctement..."? Pourquoi le retour d'une vue, et de ne pas rediriger loin de ne pas définir l'authentification par cookie?
OriginalL'auteur Darin Dimitrov