質問: 掲題の件で悩んでいるのですが、現実的に可能なのでしょうか? 現在、AサイトをWordPressdをインストールしwoocommerceのプラグインでショッピングサイトを構築。 一方Bサイトは美容室予約アプリでフルスクラッチで作成予定。 (現在すでに美容室の顧客管理アプリとして実装。これにユーザーがウェブ予約できる機能をプラスして実装予定。) このAサイトとBサイトのユーザーアカウントを共通化したいのですが、 現実的に可能なのでしょうか? ちなみにこのAサイトとBサイトは別のサーバです。 まずは可能かどうか、あとはざっくりこうすれば実現できるよ、 みたいなアドバイスを頂けますとありがたいです。 なぜこんなことを考えているかといいますと、 ユーザーからすると1つの美容室のHPなのに Aのショッピングページでアカウントを作成し、 Bの予約ページでもアカウントを作成するという 二度手間が発生してしまいます。 SNSアカウントを活用してとかできないでしょうか・・・? 「同一アカウント サイト」などでググってはみているのですが、 アナリティクス系のアカウント情報しか引っかかりません・・・
回答: 可能です。 よくあるシナリオでは、「ログインを片側のサイトに纏める」のが多いかなと思います。 シングルサインオンの考え方ですね。 片方のサーバーだけでログイン管理をします。 あるIDでログインできているかどうかだけを取得してきます。 Aサーバーでログインを統一するなら、BサーバーはAサーバーからログイン状態を移譲してもらいます。 ログインされてなければAサーバーでログインしてもらい、Bサーバーにリダイレクトします。 OAuth等はこれを行うためのライブラリの名前です。 Aサーバーのログイン情報にはユーザーのID情報があると思います。 BサーバーにはそのID情報に紐づけてデータを登録するようにします。 ユーザー登録というのは、ログインしている人を識別可能にするための手段なので、Bサーバー側で態々新規登録しなくても、Aサーバーのユーザー情報のIDがユニークであることが分かっているため、単純にそのIDにぶら下げる形でデータを登録していくことができます。 IDの有無で初期化処理を走らせたり、別のページに遷移させたりするのはなんとなくでも実現できそうだと思いませんか? 「Aサーバーに登録してなくて、初めてBサーバーを使う人のアカウント登録はどうするの...?」 これは、Aサーバーのサイト名のアカウントをお持ちでない方はこちらをクリック、でAサーバーに遷移させてしまいましょう。 BサーバーはAサーバーと一切データを共有する必要はありません。 こういうのはマイクロサービスではよくあります。 ログインサーバーのみを提供するソフトウェアなんかもあります。 OpenAM(Open-IDM)なんかがそうですね。 Wordpressのサイトを作ったことがないので具体的な方法までは言及できませんが、行けると思います。参考になれば幸いです。 **追記** 現実的には、サインオン時に氏名の情報ぐらいは共有することが多いです。 Aサーバーからログイン情報を受け取るときに一緒に渡してもらうことで、Bサーバーで氏名を改めて入力しなくていいようになります。または、BサーバーのバックエンドでAサーバーから情報を必要に応じて貰ってきます。 GoogleアカウントやTwitterアカウントでログインする、というサンプルでも、名前とかを一緒に受け取ることをリクエストできるようになっています。 こういうサイトでは、よく画面に「{URL}に情報を共有します。{URL}は以下の情報を見ることができます。」みたいのが出ますよね。 あれはどこまで情報を与えてよいか、その制御をユーザー側に確認しているのです。 今回は両方貴方(のグループ?)が作っている製品なので、そのあたりの表示は必要ないですから、大事なこととしては「Bサーバーが必要に応じてAサーバーから情報を取ってくる実装は有り」ってことだけ覚えておいていただければと思います。