Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah saya boleh menavigasi secara automatik ke halaman yang dinyatakan dalam pautan dalam e-mel apabila pengguna log masuk secara automatik?

Bagaimanakah saya boleh menavigasi secara automatik ke halaman yang dinyatakan dalam pautan dalam e-mel apabila pengguna log masuk secara automatik?

WBOY
WBOYasal
2024-09-10 20:30:32709semak imbas

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

Berikut ialah pecahan kod dan cara ia berfungsi:

Fungsi Menghantar E-mel

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);
        }
    });
}

Penjelasan:

Sediakan Pengangkut:

Mengkonfigurasikan Nodemailer untuk menghantar e-mel menggunakan Office365 SMTP.
Pilihan Mel:

Sediakan e-mel dengan subjek dan badan HTML, termasuk pautan dengan parameter pertanyaan ubah hala.
Kod URL:

Menggunakan encodeURIComponent untuk mengekodkan Url dengan selamat untuk dimasukkan dalam pautan e-mel.
Hantar Mel:

Hantar e-mel menggunakan 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,
  };
}

Cari Pengguna:

Mengambil pengguna melalui id dan menyemak kelayakan.
Hasilkan JWT:

Mencipta token JWT dan menetapkannya sebagai kuki.
Nyahkod URL Ubah Hala:

Menyahkod parameter ubah hala daripada badan permintaan.
Balas Balas:

Mengembalikan mesej kejayaan dan URL ubah hala yang dinyahkod.
Penyerahan Bahagian Depan

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);
  }
};

Serah Log Masuk:

Menghantar permintaan log masuk dengan id, kata laluan dan URL ubah hala.
Mengendalikan Respons:

Jika log masuk berjaya, navigasi ke URL yang disediakan dalam medan ubah hala respons.
Pengendalian Ralat:

Menangkap dan mencatat sebarang ralat semasa proses.
Persediaan ini memastikan bahawa apabila pengguna log masuk, mereka diubah hala secara automatik ke URL yang dinyatakan dalam pautan e-mel.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menavigasi secara automatik ke halaman yang dinyatakan dalam pautan dalam e-mel apabila pengguna log masuk secara automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn