2017-03-29 12 views
0

どのユーザーが招待状に応答したかを知るために、暗号化された電子メールでユーザーにメールで招待状を送信します。以下のような何か:Laravelの内蔵暗号化機能でランダムエラーを解読

こんにちは、学習を開始するには、このリンクをクリックしてください:https://example.org/start-learning?e=fwTreaN0WybffXdDfZZUNYB3FTFfZObCb7QFF5C4AFJvTjXabIPtRfcoXLkFYMUvD4FIZsmrDdEFN2OPKcTrAOSQLZfuKdfwcic1WtBxWSXWR1GEJD6we213A3BEPBpca0BxaaQ4GGMPFeRyXp6fPrG9WnTgWogwXUcnVtdwSEEdNHGuZsClTxR2AtD2JZN8VAEsRQKpFFShEDR2SET4KxGhLGM3M0FdDelrJtO8KXS2YRaddH==

暗号化された電子メールは、上記の長い文字列です。次に、この$urlこのようなメールテンプレートに追加され

$url = 'https://example.org/start-learning?e=' . encrypt($this->to[0]['address']); 

:私はMailableクラスにこのようなメールをコード

<a href="{{$url}}>click me<a> 

そして、ユーザがコントローラへのリンク、そのルートをクリックしたときとコントローラはペイロードを復号化します。

decrypt($request->input('e')); 

次に、リンクをクリックする人の約99%が動作します。しかし、約1%のために、それは動作しません、私は解読エラーがあります。そして私は理由を知らない。これは、暗号化と復号化を行うLaravelアプリケーションと同じです。 このような奇妙な行動の理由はありますか?

サイドノート:私はdecryptが常に動作することを知っており、ランダムな動作をしていません(私は10000エントリでテストしました。私が理解していないメールプロセスには別のものが必要です。

+0

メッセージIDをユーザーに送信し、メッセージIDを要求したときにサーバーから取得し、メッセージを暗号化して取得要求で取得するのではなく、 –

+0

このアプリケーションは何千ものメールを送信します。ユーザーがアプリケーションを使用する前に情報を保存することは望ましくありません。したがって、ユーザーがリンクをクリックしていくつかのことを行う場合にのみ参加を作成します。 –

+0

urlencode()とurldecode()を使用しようとしましたか? – dparoli

答えて

1

は、私はそうはなく、リンクを作成するときにurlencode()を使うべきだと思う:

$url = 'https://example.org/start-learning?e=' . encrypt($this->to[0]['address']); 

はあなたが使用する必要があります。

$url = 'https://example.org/start-learning?e=' . urlencode(encrypt($this->to[0]['address'])); 

は、それが有効になりますことを確認します。

+0

ありがとうございました。たとえ私が "https://example.org/start-learning/abcdefg"のようなルートを持っていても?とにかく、ログに作業負荷がなく、HTTP転送で変更されていないように見えるので、ここに問題があるかどうかはわかりません。 –

+0

このルートの作成方法によって異なります。手動で作成する場合は、おそらくまだそれをurlencodeする必要があります。ルートまたはURLヘルパーを使用している場合は、コードを参照する必要がありますが、おそらくLaravelはそのフードの下で行います。 –

関連する問題