
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);
}
});
}
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,
};
}
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);
}
};
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!
ps quitter la touche de raccourci plein écran
Quelle est la différence entre golang et python
Plateforme formelle de trading de devises numériques
Méthode d'initialisation du tableau
Une mémoire capable d'échanger des informations directement avec le CPU est une
Quel est le meilleur moyen d'apprendre en premier, le langage C ou le C++ ?
Quel est le rôle du serveur sip
Quelle plateforme est Fengxiangjia ?