You are not logged in.
Bonjour,
J'ai besoin pour mon site de permettre à l'utilisateur de s'authentifier sur le front.
J'ai donc fait des premier tests avec le système de gestion des utilisateurs front existant : login/inscription/gestion des données utilisateur ()
Hors, je n'ai pas vu de possibilité d'afficher le login - mode "Vous avez déjà un compte"- hors des pages a accés limité.
J'ai mis mon service sign-up dans l'en-tête de mes pages mais il n'apparait qu'on mode "Inscription".
Y a-t-il un moyen simple de mettre en place une authentification utilisateur front globale et non pas aux pages d'accès restreint ?
Last edited by gafou (06/03/2014 11:44:19)
Offline
Si j'ai bien compris vous souhaitez avoir un formulaire de login sur toute vos pages ? (et pas uniquement qui s'affiche quand on clique sur une page à accès restreint).
Alors déjà, vos pages finales ne seront plus cacheables (puisque une fois loggué vous ne souhaitez plus afficher ce formulaire, mais plutot le login de la personne). Lorsque vous affectez cette charte à un site, il faut donc impérativement décocher "Afficher les pages à accès limité" dans la configuration du site.
Ainsi, actuellement tout le monde voit un plan du site complet, mais suite à cette modification de paramètre, chacun ne verra que les pages auquel il a droit => si on est pas loggué on ne voit aucune page limité => on ne peut plus tomber sur le page de login en navigant => il faut ajouter la possibilité de se logguer dans la charte.
Ensuite, simplement dans votre charte:
* Soit l'utilisateur est loggué et vous affichez son nom via
* Soit il n'est pas loggué et vous affichez un mini-formulaire sur le modèle de celui de la page de login en POST avec "Username", "Password" et un champ caché "requestedURL" à l'adresse "_authenticate". (requestedURL est à remplir avec le path de la page en cours que vous récupérez de la façon suivante (à tester car je code à l'aveugle là) resolver:resolveURI('page', ametys:pageId())
J'espère avoir répondu à la question
Raphael Franchet
Expert Ametys
Offline
Bonjour,
Merci pour cette réponse.
Il me reste le problème du retrour en erreur du formulaire. En effet, en cas d'erreur sur la connexion, le retour va obligatoirement sur le xsl de login (skin/maskin/services/web/pages/frontoffice-login/login.xsl) qui remplace le contenu de la page par le login.
Y a-t-il un moyen de le faire renvoyer sur le xsl de la page courante, avec la gestion des erreurs au niveau du formulaire custom ?
Last edited by gafou (06/03/2014 15:05:46)
Offline
En effet, car vous utilisez l'authentification par défaut.
Ce qu'il faut faire dans votre cas :
1) déclarer une nouvelle authentification en dupliquant celle par défaut dans votre plugin.xml
2) la faire pointer vers votre propre classe java qui hérite de celle par défaut
3) surcharger la méthode getLoginFailedURL pour renvoyer le contenu du paramètre
4) choisir cette nouvelle authentification dans le runtime.xml
Mais attention, tout ça est à faire dans l'application site (et pas l'application backoffice) : il est probable que vous n'y ayez pas encore de plugin.
Voici le plugin site par défaut : Vous y trouverez ceci :
<feature name="site.authentication.impl.formbased">
<!--
This features defines the form based credential provider for front office. Data are sent to the provider through a
html form. If the option is enabled, user's data can be stored with a cookie.
-->
<extensions>
<extension point="org.ametys.runtime.authentication.CredentialsProvider"
id="org.ametys.site.plugins.site.authentication.FormBased"
class="org.ametys.plugins.site.authentication.SiteFormBasedCredentialsProvider"
logger="org.ametys.runtime.authentication.formbased">
<username-field>Username</username-field>
<password-field>Password</password-field>
<rememberMe-field>rememberMe</rememberMe-field>
<cookie>
<cookieEnabled>true</cookieEnabled>
<cookieLifeTime>604800</cookieLifeTime>
<cookieName>AmetysSiteAuthentication</cookieName>
</cookie>
<loginUrl internal="true"/>
<loginFailedUrl provideLoginParameter="true" internal="true"/>
</extension>
</extensions>
</feature>
L'url d'erreur par défaut de la classe est la suivante :
@Override
protected String getLoginFailedURL()
{
return "_generate/plugins/web/frontoffice-formbasedauthentication/login/failed/" + getSite();
}
"_generate" signifie de faire suivre au backoffice
dans votre cas ça devra ressembler à ceci (codé à l'aveugle encore ):
@Override
protected String getLoginFailedURL()
{
return "_generate/" + getSite() + ContextHelper.getRequest(_context).getParameterValues("requestedURL");
}
Je vous laisse ensuite ajouter un éventuel "?loginfailed=true" à la fin pour dans votre xsl traiter ce cas via un
Raphael Franchet
Expert Ametys
Offline
Pour une raison que je ne m'explique pas, ma redirection vers la page courante repasse quand même par _authenticate, et ce même après changement de mon url getLoginFailedURL ("_generate/" + getSite() + ContextHelper.getRequest(_context).getParameter("requestedURL")+"?loginfailed=true").
Url login failed :
_generate/monsite/fr/index.html?loginfailed=true
Logs :
2014-03-07 15:05:22,369 INFO [sitemap] Redirecting to 'cocoon://_generate/monsite/fr/index.html?loginfailed=true&login=456456'
2014-03-07 15:05:22,482 INFO [access] '_authenticate' Processed by Apache Cocoon 2.1.11 in 116 milliseconds.
URL de la page affichée en retour erreur :
http://localhost:8080/_authenticate?requestedURL=/fr/index.html
J'ai l'impression que c'est l'ajout du paramètre "login=456456" qui déclenche la redirection sur _authenticate.
De quoi celà peut-il venir ? Y aurait-il un autre élément à surcharger ?
Last edited by gafou (07/03/2014 16:25:06)
Offline
Au moment où vous cliquez dans "se logguer" pour soumettre le formulaire vous envoyez à l'url "_authenticate" c'est ça ?
Si ça fonctionne, vous être redirigé correctement.
Si ça rate, à la place de votre page courante avec une petite erreur dans le formulaire, vous avez une grosse page d'erreur ?
Raphael Franchet
Expert Ametys
Offline
Vous avez "http://localhost:8080/_authenticate?requestedURL=/fr/index.html" dans l'url car c'est l'url à laquelle vous avez soumis le formulaire. La redirection vers votre page n'est qu'interne.... c'est pas top.
Pour faire une redirection externe, dans la configuration du plugin, il faut mettre <loginFailedUrl provideLoginParameter="true" internal="false"/>
Par contre, en faisant, ce que je vous ai dit plus haut, vous êtes en train de créer une belle faille de sécurité
En effet, la page de "login failed" est toujours acceptée et servie ; et là la page courante est la page de login failed => toutes les pages doivent être acceptée !!! un comble => à tester en tapant manuellement l'url d'une page protégée.
Pour répondre à votre interrogation, en effet si vous regardez le code dans le SVN, vous verrez que la méthod "accept" se conduit différemment à partir du moment où le login est en paramètre de n'importe quelle url.
Vous pouvez essayer déjà en mettant à false "provideLoginParameter" dans la configuration du plugin.
La méthode "accept" sert à indiquer que la page n'a pas besoin d'authentification.
Raphael Franchet
Expert Ametys
Offline