0

Heroku と接続して Cloud9 を使用して Web アプリを起動しています。プログラミングのスキルと経験が限られているため、フロントエンドのコーディングのみに集中しようとしています。そのため、Kinvey をバックエンドとして使用し、Mandrill を電子メールに使用しています。

ロジックには次のシナリオが含まれます。登録ユーザーは、他のユーザー (必ずしも登録されている必要はありません) が要素をコレクション (DB) に追加できるようにすることができます。そのため、アプリを使用して、登録ユーザーは他の人の電子メールを入力して要素を要求できます。メールには URL が含まれている必要があります。パスワードのリセット URL と同じですが、パスワードの代わりに特定の DB 要素ではありません。

現在のソリューションを利用して、この URL を生成するにはどうすればよいですか? または、一般的にどのように簡単に生成できますか? そして、それは安全でしょうか?

ありがとう!!

4

1 に答える 1

0

パスワードのリセットに似た電子メール検証を生成する機能は、「既製品」の機能としては存在しません。自分で実装する必要があります。ただし、思ったほど難しくはありません。もちろん、少し手間がかかるので、主要/高レベルのポイントについて説明します。このプロセスの正確な結果が不明であることに注意してください。「データベース要素を要求する」と述べています。これは単純にデータを取得することを意味すると思いますが、以下の点の多くは依然として当てはまります。

1) ユーザーは誰にでも電子メールを送信する機能をトリガーします。ほとんどの場合、これは Kinvey エンドポイントにあります (またはそうあるべきです)。したがって、電子メールの生成に必要な関連データを使用してエンドポイントを呼び出します。

2) エンドポイントがトークンを生成します。トークンを生成するための正確な方法/アルゴリズムは、自分で実装する必要があります。これを行うための多くの方法をオンラインで見つけることができます。

3) データ コレクションに対してトークンを保存します。また、タイムスタンプをここに保存するか、生成されたタイムスタンプを利用します。

4) ユーザーへの URL を含む電子メールを (電子メール送信に Kinvey BL モジュールを使用して) トリガーします。この URL にはトークンが追加されています。

5) 電子メールがユーザーによって受信され、ユーザーはリンクをクリックします。これらは、作成する必要があるページに移動し、そのページでコードがトークンを取得します。

6) トークンを検証するために、Kinvey へのリクエストを実行する必要があります。特定のユース ケースに基づいて追加の検証を実行できますが、最も単純なケースでは、Kinvey BL エンドポイントをヒットする必要があります。もちろん、Kinvey に対して認証するには、一時的/汎用ユーザーを生成する必要があります。したがって、このステップでは、「自動生成」ユーザーをサインアップして登録します。

7) 一時ユーザーを使用して Kinvey エンドポイントを呼び出し、トークンを渡します。Kinvey エンドポイントで、トークン コレクション (ステップ 3 から) に対してルックアップを実行し、その他のカスタム検証も実行します。トークンが存在する場合は、必要なデータを取得してユーザーに返します。

重要:この時点で、自己登録した一時ユーザーは、上記のすべての手順を実行して、必要なものにアクセスできます。重要なのは、トークンと保護されたデータ コレクションにプライベートアクセス許可を設定することです。そうすれば、ステップ #7 で、ユーザーはトークンを検証したり、コレクションにアクセスしたりできなくなります。ただし、ステップ #7 では、トークンを確認するために、マスター シークレットを使用してマスター ユーザーとしてルックアップを実行する必要があります。成功した場合は、データを取得してユーザーに返します。

最後に (そして簡単に言えば) - これは、すべてのユーザーがトークンを生成できることを意味し、そのトークンは他のデータ (コレクション/フィールド/レコード、電子メール アドレスなど) に関連付けられます。次に、トークンを知っている人だけが、トークンが参照するデータにのみアクセスできます。データは非公開であるため、マスター シークレット (バックエンドで動作するため保護されている) のみがデータを検証し、ユーザーに応答を返すことができます。これは最初は圧倒されるように思えますが、論理的なステップに分解すると、実際にはかなり簡単です。

于 2014-11-20T07:26:30.437 に答える