ユーザーが自動的にログインしたときに、電子メール内のリンクで指定されたページに自動的に移動するにはどうすればよいですか?
コードの内訳とその仕組みを次に示します。
メール送信機能
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 サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

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

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

qwikachievesintantloadingbydefaultroughresumability、nothydration:1)theserverrendershtmlwithserializedstateandpre-mappeventlisteners;

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

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

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

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

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