Maison > interface Web > js tutoriel > Comment puis-je accéder automatiquement à une page spécifiée dans un lien dans un e-mail lorsque l'utilisateur se connecte automatiquement ?

Comment puis-je accéder automatiquement à une page spécifiée dans un lien dans un e-mail lorsque l'utilisateur se connecte automatiquement ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-09-10 20:30:32
original
801 Les gens l'ont consulté

How can I automatically navigate to a page specified in a link within an email when the user logs in automatically?

Voici une description du code et de son fonctionnement :

Fonction d'envoi d'e-mails

async sendingEmail(email, ndfCollabName, message, numero, intitulé, Url) {
    const transporter = nodemailer.createTransport({
        host: 'smtp.office365.com',
        port: 587,
        secure: false,
        auth: {
            user: process.env.USER_EMAIL,
            pass: process.env.USER_PASS,
        },
    });
    const mailOptions = {
        from: 'fromEmail@gamil.com',
        to: email,
        subject: '',
        html: `
        <!DOCTYPE html>
        <html lang="fr">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>test</title>
            <style>
                body {
                    font-family: Arial, sans-serif;
                    line-height: 1.6;
                    color: #333;
                    max-width: 600px;
                    margin: 0 auto;
                    padding: 20px;
                }
                h1 {
                    color: #007bff;
                }
                h2 {
                    color: #555;
                }
                .links {
                    margin-top: 20px;
                }
                .links a {
                    display: block;
                    margin-bottom: 10px;
                    color: #007bff;
                } 
            </style>
        </head>
        <body>
            <h1>Cher/Chère ${ndfCollabName.toUpperCase()},</h1>
            <h2>${message}, N° ${numero}, ${intitulé}.</h2>
            <div class="links">
                <a href="http://localhost:4000/?redirect=${encodeURIComponent(Url)}">Lien local</a>
            </div>
            <h2>Vérifiez ici?</h2>
        </body>
        </html>
        `,
    };
    transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            console.log(error);
        } else {
            console.log('Email sent:' + info.response);
        }
    });
}

Copier après la connexion

Explication :

Configurer le transporteur :

Configure Nodemailer pour envoyer des e-mails à l'aide d'Office365 SMTP.
Options de messagerie :

Configure l'e-mail avec l'objet et le corps HTML, y compris les liens avec un paramètre de requête de redirection.
Encoder l'URL :

Utilise encodeURIComponent pour encoder en toute sécurité l'URL à inclure dans les liens de courrier électronique.
Envoyer un courrier :

Envoie l'e-mail en utilisant transporter.sendMail.

@Post('login')
async login(
  @Body('id') id: string,
  @Body('password') password: string,
  @Body('company') company: Company,
  @Body('redirect') redirect: string,
  @Res({ passthrough: true }) response: Response,
) {
  const user = await this.collaborateursService.find({
    where: { nomtechnicien: id },
    relations: [
      'companies',
      'roles.role',
      'roles.company',
      'groups',
      'groupe',
    ],
  });

  if (!user) {
    throw new BadRequestException('Invalid credentials');
  }
  if (!(await bcrypt.compare(password, user.password))) {
    throw new BadRequestException('Invalid credentials');
  }
  if (!user.lastconnectedcompany) {
    await this.collaborateursService.lastConnectedCompany(user.id, user.companies[0]);
  }

  const jwt = await this.jwtService.signAsync({
    id: user.id,
    name: user.nomtechnicien,
    lastconnectedcompany: user.lastconnectedcompany || user.companies[0].name,
    rolesByCompanies: user.rolesByCompanies,
    groups: user.groups!,
    company: user.companies,
    companyId: user.companies.filter((company) =>
      user.lastconnectedcompany
        ? company.name == user.lastconnectedcompany
        : company.name == user.companies[0].name,
    )[0].identifiantBc,
  });
  response.cookie('jwt', jwt, { httpOnly: true });
  delete user.password;
  return {
    message: 'success',
    user,
    redirect: redirect ? decodeURIComponent(redirect) : null,
  };
}

Copier après la connexion

Trouver un utilisateur :

Récupère l'utilisateur par identifiant et vérifie les informations d'identification.
Générer JWT :

Crée un jeton JWT et le définit comme cookie.
Décoder l'URL de redirection :

Décode le paramètre de redirection du corps de la requête.
Réponse de retour :

Renvoie un message de réussite et l'URL de redirection décodée.
Soumission frontale

const submit = async () => {
  setIsLoading(true);
  try {
    const res = await empLogin({ id: id, password: pass, redirect: redirectUrl });
    console.log(res);
    if (res.message === "success") {
      dispatch(login());
      // Navigate to the redirect URL provided in the response
      navigate(res.redirect);
    }
  } catch (error) {
    console.log(error);
    setError(true);
  } finally {
    setIsLoading(false);
  }
};

Copier après la connexion

Soumettre la connexion :

Envoie une demande de connexion avec l'identifiant, le mot de passe et l'URL de redirection.
Gérer la réponse :

Si la connexion réussit, accède à l'URL fournie dans le champ de redirection de la réponse.
Gestion des erreurs :

Détecte et enregistre toutes les erreurs pendant le processus.
Cette configuration garantit que lorsqu'un utilisateur se connecte, il est automatiquement redirigé vers l'URL spécifiée dans le lien de l'e-mail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal