リクエストが届いたときにドメイン名をユーザー ID にマップするにはどうすればよいですか?
明らかに、その情報をどこかに、おそらくデータベースに保存する必要があります。
domains
列を含むデータベース テーブルを追加します。
- 顧客ID
- 名前
- アクティブ (1 または NULL)
- チャレンジ
(name, active) の一意のキーを追加して、ドメイン名が 1 回だけマップされるようにします。
顧客がドメインを追加しようとすると、active=NULL の行を追加し、チャレンジをランダムな文字列に設定します。
顧客にランダムな文字列を見せて、ドメインの所有権を確認するために、それを使用してウェブページをサイトに掲載するか、それを使用してダミーの DNS レコードを作成するように依頼します (これが Google Apps の方法です)。
管理者の連絡先に電子メールを送信するか、その他の方法で所有権を確認できます。
顧客が、ステップ 2 で指示したことを実行したと言ったら、それを確認し、active=1、challenge=NULL に設定します。
ドメインが以前に他の顧客に対してアクティブだった場合は、それらのレコードを削除するか、アクティブ = 0 に設定します。
ドメインの CNAME レコードを追加して、ドメインに転送するよう顧客に依頼しますhosted.myservice.com
(例: Google はghs.google.com
Google Apps に使用します)。
リクエストが来たら実行する
SELECT customerId FROM domains WHERE name=:requestDomain AND active=1
より良い方法は、カスタム ドメインに加えて<customername>.myservice.com
、の形式のドメインを顧客に自動的に提供することです。これにより、次の 2 つの利点が得られます。
独自のドメインを使用したくない顧客は、会社のロゴなどでログイン ページをカスタマイズできます。
カスタム ドメインの場合は<customername>.myservice.com
、一般的な ではなく に転送するよう顧客に依頼できますhosted.myservice.com
。
これにより、顧客側で変更を依頼することなく、複数のサーバー間で顧客を水平に分割できます。たとえば、顧客が自分のアカウントを EU でホストするか米国でホストするかを選択するオプションを提供できます。変更したら、データを転送して更新するだけ<customername>.myservice.com
です。カスタム ドメインは自動的に機能します。
これを行うには、ワイルドカード DNS レコードを設定する*.myservice.com
必要があります (後者の機能も必要な場合を除きます。後者の場合は、個々のレコードを管理する必要があります)。