Logo

Inscription utilisateur

Déjà un compte ? Se connecter Doc FR Doc FR Doc EN Doc EN ← Retour à l'accueil

Site de démonstration — une adresse email factice est acceptée. Confidentialité.

formulaire/user.rs formulaire
// Dériver un formulaire depuis le modele utilisateur
#[form(schema = eihwaz_users_schema,
       fields = [username, email, password])]
pub struct RegisterForm;

#[async_trait]
impl RuniqueForm for RegisterForm {
    impl_form_access!(model);

    async fn clean(&mut self) -> Result<(), StrMap> {
        let mut errors = StrMap::new();
        if self.get_string("username").len() < 3 {
            errors.insert("username".into(), "3 caracteres minimum".into());
        }
        if !self.get_string("email").contains('@') {
            errors.insert("email".into(), "adresse email invalide".into());
        }
        if self.get_string("password").len() < 10 {
            errors.insert("password".into(), "10 caracteres minimum".into());
        }
        if errors.is_empty() { Ok(()) } else { Err(errors) }
    }
}
formulaire/user.rs formulaire
// Dériver un formulaire depuis le modele utilisateur
#[form(schema = eihwaz_users_schema,
       fields = [username, email, password])]
pub struct RegisterForm;

#[async_trait]
impl RuniqueForm for RegisterForm {
    impl_form_access!(model);

    async fn clean(&mut self) -> Result<(), StrMap> {
        let mut errors = StrMap::new();
        if self.get_string("username").len() < 3 {
            errors.insert("username".into(), "3 caracteres minimum".into());
        }
        if !self.get_string("email").contains('@') {
            errors.insert("email".into(), "adresse email invalide".into());
        }
        if self.get_string("password").len() < 10 {
            errors.insert("password".into(), "10 caracteres minimum".into());
        }
        if errors.is_empty() { Ok(()) } else { Err(errors) }
    }
}
handler handler
pub async fn soumission_inscription(
    mut request: Request,
    Prisme(mut form): Prisme<RegisterForm>,
) -> AppResult<Response> {
    if request.is_post() && form.is_valid().await {
        match form.save(&request.engine.db).await {
            Ok(user) => {
                auth_login(&request.session, user.id, &user.username).await.ok();
                return Ok(Redirect::to("/profil").into_response());
            }
            Err(err) => form.get_form_mut().database_error(&err),
        }
    }
    context_update!(request => { "inscription_form" => &form });
    request.render("auth/inscription.html")
}
handler handler
pub async fn soumission_inscription(
    mut request: Request,
    Prisme(mut form): Prisme<RegisterForm>,
) -> AppResult<Response> {
    if request.is_post() && form.is_valid().await {
        match form.save(&request.engine.db).await {
            Ok(user) => {
                auth_login(&request.session, user.id, &user.username).await.ok();
                return Ok(Redirect::to("/profil").into_response());
            }
            Err(err) => form.get_form_mut().database_error(&err),
        }
    }
    context_update!(request => { "inscription_form" => &form });
    request.render("auth/inscription.html")
}
inscription.html template
<form method="post" action="/inscription">
    {# Rendu complet — CSRF inclus automatiquement #}
    {% form.inscription_form %}
    <button type="submit">S''inscrire</button>
</form>

{# Rendu champ par champ — CSRF toujours inclus automatiquement #}
<form method="post" action="/inscription">
    {% form.inscription_form.username %}
    {% form.inscription_form.email %}
    {% form.inscription_form.password %}
    <button type="submit">S''inscrire</button>
</form>
inscription.html template
<form method="post" action="/inscription">
    {# Rendu complet — CSRF inclus automatiquement #}
    {% form.inscription_form %}
    <button type="submit">S''inscrire</button>
</form>

{# Rendu champ par champ — CSRF toujours inclus automatiquement #}
<form method="post" action="/inscription">
    {% form.inscription_form.username %}
    {% form.inscription_form.email %}
    {% form.inscription_form.password %}
    <button type="submit">S''inscrire</button>
</form>