7 votes

ServiceStack Razor Authentication

Je regarde l'exemple des Rockstars et ServiceStack.Razor.

Comment puis-je intégrer l'authentification dans, par exemple, la page secure.cshtml. Ainsi je peux rediriger l'utilisateur vers Login.cshtml si nécessaire.

Je comprends seulement à partir de l'exemple SocialBootstrapApi que si je mélange MVC hybride, je peux mettre [authenticate()] au ServiceStackController pour y parvenir.

Mais que se passe-t-il si je veux juste un projet SS pur sans .net MVC?

7voto

mythz Points 54874

Le attribut Authenticate est simplement un filtre de requête ServiceStack, c'est-à-dire qu'il fonctionne à la fois dans MVC et ServiceStack.

Appliquer ce filtre renverra une réponse 401 Non autorisé pour toutes les demandes autres que HTML. Par exemple, si vous appelez cela avec Ajax, vous pouvez détecter cette réponse d'erreur et rediriger côté client.

À partir de v3.9.23+ de ServiceStack, l'attribut [Authenticate] redirigera automatiquement toutes les erreurs d'authentification vers l'URL ~/login par défaut.

Vous pouvez remplacer cette URL lors de l'enregistrement de la fonctionnalité Auth, par exemple :

Plugins.Add(new AuthFeature(...) { HtmlRedirect = "/chemin/vers/mon/login" });

Cela s'appliquera globalement à tous les attributs [Authenticate] ou vous pouvez le remplacer de manière ad hoc avec :

[Authenticate(HtmlRedirect="/chemin/vers/mon/login")]

Remarque : Les attributs sont héritables, vous pouvez donc ajouter ceci une fois à une classe SecuredService et toutes les sous-classes hériteront de son comportement.

Redirection manuelle

Pour rediriger manuellement une demande HTML non autorisée, vous pouvez effectuer vos propres vérifications + redirection avec :

public object Secured(Request request) {
    if (!base.SessionAs().IsAuthenticated)
        return new HttpResult(HttpStatusCode.Redirect, "Non autorisé") { 
           Headers = { {"Location", "/chemin/vers/login" } } };
}

Il existe également un wrapper DRY autour de la redirection ci-dessus que vous pouvez utiliser à la place :

public object Secured(Request request) {
    if (!base.SessionAs().IsAuthenticated)
        return HttpResult.Redirect("/chemin/vers/login");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X