電子メールの招待リンクを介して Orchard でユーザー登録を許可することを検討したことのある人はいますか? 管理者に、電子メール アドレスを入力して登録招待状をこれらの人々に送信できるフォームを用意してもらいたいです。
1 に答える
私はこのようなものを実装しました。ほとんどの難しい機能は既に Orchard に組み込まれています。これは、既存のものを利用した例にすぎません。
電子メール アドレスをユーザー名 (プレースホルダーとしてのみ機能するため) として使用し、ランダムなパスワードを使用して、新しいユーザーを作成します。招待プロセスを完了するまでログインできないようにするには、登録ステータスを「保留中」に設定する必要があります。**
電子メールの送信に関しては、
IUserService.CreateNonce(...)
メソッドを使用して、新しいユーザーの一意のトークンを作成します。この nonce を使用して URL を作成しますIMessageManager.Send(...)
。また、トークンを使用して送信メールをカスタマイズできるハックな方法 ;)ユーザーがリンクをクリックすると、 ~/invite/{nonce} のリクエストを処理するコントローラーに送信されます。このコントローラーは、ユーザーが新しいユーザー名とパスワードを入力できるフォームを表示し、nonce を隠しフィールドに保存します。
フォームを投稿すると、nonce を使用して復号化
IUserService.DecryptNonce(...)
され、ユーザー名にアクセスできるようになります。これを に渡しIMembershipService.GetUser(...)
て対応する を取得しIUser
、投稿された残りの情報 (ユーザー名、パスワードを使用してIMembershipService.SetPassword(...)
など) で更新できます。
IIRC は、Orchard が失われたパスワードの要求を処理する方法に従って、特定のユーザーに対して一意の URL を生成し、その URL に移動したユーザーを取得するための参照としてそれを使用することによって、これを達成しました。
** この時点でユーザー コンテンツ アイテムを作成する必要はありませんIContentManager.New<UserPart>("User")
。ユーザー名を設定している限り、結果を使用するだけで十分です。これは、手順 4 で招待が受け入れられるまで新しいユーザー コンテンツ アイテムを作成したくない場合に便利です。