ホームページ ウェブフロントエンド jsチュートリアル ユーザーが自動的にログインしたときに、電子メール内のリンクで指定されたページに自動的に移動するにはどうすればよいですか?

ユーザーが自動的にログインしたときに、電子メール内のリンクで指定されたページに自動的に移動するにはどうすればよいですか?

Sep 10, 2024 pm 08:30 PM

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

コードの内訳とその仕組みを次に示します。

メール送信機能

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

説明:

トランスポーターのセットアップ:

Office365 SMTP を使用して電子メールを送信するように Nodemailer を構成します。
メールオプション:

リダイレクト クエリ パラメーターを含むリンクを含む、件名と HTML 本文を含む電子メールを設定します。
URL をエンコード:

encodeURIComponent を使用して、メール リンクに含める URL を安全にエンコードします。
メールを送信:

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

ユーザーの検索:

ID でユーザーを取得し、資格情報を確認します。
JWT の生成:

JWT トークンを作成し、Cookie として設定します。
デコードリダイレクト URL:

リクエスト本文からリダイレクトパラメータをデコードします。
応答を返します:

成功メッセージとデコードされたリダイレクト URL を返します。
フロントエンドの送信

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

ログインを送信:

ID、パスワード、リダイレクト URL を含むログイン要求を送信します。
ハンドル応答:

ログインに成功すると、応答のリダイレクト フィールドに指定された URL に移動します。
エラー処理:

プロセス中のエラーをキャッチしてログに記録します。
この設定により、ユーザーがログインすると、電子メール リンクで指定された URL に自動的にリダイレクトされます。

以上がユーザーが自動的にログインしたときに、電子メール内のリンクで指定されたページに自動的に移動するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VercelSPAルーティングとリソースの読み込み:ディープURLアクセスの問題を解決する VercelSPAルーティングとリソースの読み込み:ディープURLアクセスの問題を解決する Aug 13, 2025 am 10:18 AM

この記事の目的は、Vercelにシングルページアプリケーション(SPA)を展開する際に、ディープURLの更新または直接アクセスの原因となる問題を解決することを目的としています。コアは、Vercelのルーティング書き換えメカニズムと相対パスを解析するブラウザの違いを理解することです。 Vercel.jsonを設定してすべてのパスをindex.htmlにリダイレクトし、HTMLの静的リソースの参照方法を修正し、相対パスを絶対パスに変更し、アプリケーションがすべてのリソースを任意のURLに正しくロードできるようにします。

Vercel Single Page Application(SPA)展開ガイド:ディープURLアセットの負荷の問題の解決 Vercel Single Page Application(SPA)展開ガイド:ディープURLアセットの負荷の問題の解決 Aug 13, 2025 pm 01:03 PM

このチュートリアルは、Vercelにシングルページアプリケーション(SPA)を展開するときにマルチレベルのURL( /プロジェクト /ホームなど)にアクセスするときに、資産(CSS、JS、画像など)をロードする問題を解決することを目的としています。コアは、vercelのルーティング書き換えメカニズムとHTMLの相対/絶対パスの違いを理解することにあります。 vercel.jsonを正しく構成することにより、すべての非ファイル要求がindex.htmlにリダイレクトされ、HTMLの資産参照を絶対パスとして修正することにより、任意の深度URLでSPAの安定した動作を達成します。

QWIK:インスタントロードWebアプリの再開可能なフレームワーク QWIK:インスタントロードWebアプリの再開可能なフレームワーク Aug 15, 2025 am 08:25 AM

qwikachievesintantloadingbydefaultroughresumability、nothydration:1)theserverrendershtmlwithserializedstateandpre-mappeventlisteners;

JSは、配列の開始に要素を追加します JSは、配列の開始に要素を追加します Aug 14, 2025 am 11:51 AM

JavaScriptでは、配列の先頭に要素を追加する最も一般的な方法は、unshift()メソッドを使用することです。 1. unshift()を使用すると、元の配列が直接変更されると、1つ以上の要素を追加して、追加された配列の新しい長さを返すことができます。 2.元の配列を変更したくない場合は、拡張機能操作者([newElement、... arr]など)を使用して新しい配列を作成することをお勧めします。 3. concat()メソッドを使用して、新しい要素配列と元の番号を組み合わせて、元の配列を変更せずに新しい配列を返すこともできます。要約すると、元の配列を変更するときにunshift()を使用し、元の配列を変更しておくときは拡張オペレーターを推奨します。

JavaScriptを使用して画像を怠zyにする方法 JavaScriptを使用して画像を怠zyにする方法 Aug 14, 2025 pm 06:43 PM

usetheloading = "lazy" aptiontfornativelazyloadinginmodernbrowserswithoutjavascript.2.formorecontrololorolderbrowsersupport、interthectionectingttingdata-srcfortheactualimageururururursisaplaceholdininsrc.3.ob.3.ob.

JavaScript XSS防御機能の共通の脆弱性と改善戦略の詳細な分析 JavaScript XSS防御機能の共通の脆弱性と改善戦略の詳細な分析 Aug 14, 2025 pm 10:06 PM

この記事では、カスタムJavaScript XSS防御機能の詳細なセキュリティの脆弱性、特に不完全な文字エスケープとキーワードベースのフィルタリングへの簡単なバイパスについて説明します。例の関数を分析することにより、引用符やバックコートなどの未処理のキーワード文字のリスクと、コード難読化技術が単純なキーワード検出をどのように回避するかを明らかにします。この記事は、コンテキストに敏感な脱出の重要性を強調し、より堅牢なセキュリティ保護を構築するために、成熟したライブラリと多層防衛戦略の採用を推奨しています。

JavaScriptのDOMを使用してHTML要素にアクセスして変更する方法 JavaScriptのDOMを使用してHTML要素にアクセスして変更する方法 Aug 16, 2025 am 11:25 AM

toaccessandModifyHtmLelementSusingJavaScript、firstSelectTheElementusingMethodslikedocument.getElementByid、document.QuerySelector、ordocument.QuerySelectorAll、TheralteritsContent、属性、Orstyles;

jQueryポップアップウィンドウでの動的外部リンクジャンプのイベント処理を最適化する jQueryポップアップウィンドウでの動的外部リンクジャンプのイベント処理を最適化する Sep 01, 2025 am 11:48 AM

この記事の目的は、jQueryポップアップウィンドウで外部リンクリダイレクトボタンをリダイレクトする問題を解決することを解決することを目的としています。ユーザーが複数の外部リンクを連続してクリックすると、ポップアップのジャンプボタンは常に最初のクリックリンクを指す場合があります。コアソリューションは、オフ(「クリック」)メソッドを使用して、新しいイベントの各バインディングの前に古いイベントハンドラーを元に戻し、ジャンプ動作が常に最新のターゲットURLを指すようにし、正確で制御可能なリンクリダイレクトを実現することです。

See all articles