ログインシステムに janrain を使用したいのですが、準備はできていますが、データベースの構築方法がわかりません。openID を使用するためのデータベース設計は何ですか? 特に、一部のユーザーがいくつかの異なるプロバイダーを持っている場合、どうすれば彼らが誰であるかを知ることができますか?彼らは新しいユーザーですか、それとも古いユーザーですか?完全なデータベース設計が必要です
3 に答える
ユーザー情報を保存するテーブルに openId の列を追加します。
例は次のとおりです。
create table users (
first_name varchar(50),
last_name varchar(50),
email_address varchar(100),
openId varchar(150));
ユーザーがアプリケーションにログインしているときに検索が高速になるように、openId のインデックスを設定することもできます。また、UNIQUE 制約を追加して、同じ openId を持つユーザーに 2 つの行が存在しないようにします。
アプリケーションで行ったことをお勧めします。users テーブルにブール値の列がありました。ユーザーが openID を使用する場合は 1、使用しない場合は 0。もう 1 つのテーブルは、オープン ID を使用するときに提供されるプロバイダとキーを含む opneID テーブルです。したがって、次の 3 つのシナリオがあります。
- ユーザーはすでにログインしており、次回のログイン時に openID を追加したいと考えています。
- ユーザーはすでに登録されていますが、次回ログインするときに openID を使用したいと考えています。
- ユーザーは登録されておらず、OpenID を使用してログインしようとしています。
これは私がしたことです:
詳細はすでに保存されているため、現在ログインしているユーザーを検索し、openID ブール値を true にして、提供する openID の詳細を追加します。
彼が openID をクリックすると、すでに登録されているかどうか、電子メール ID とパスワードを尋ねられた場合は、openID の詳細を使用するかどうかを尋ねられます。
- (これが最も難しい部分です) openID をブール値 1 にし、OpenID の詳細を追加してから、アプリケーションに適した重要な詳細を尋ねるフォームを彼に渡します。アプリケーションの規模によっては、2 番目のフォームが必要ない場合があります。私が取り組んでいたアプリケーションは、ユーザーからの追加情報を必要としていました。2 番目のステップをスキップしたい場合は、Facebook API によって提供されるいくつかのオプションを調べて、first_name last_name などの詳細を取得して保存します。
したがって、ユーザーがログインしているときに、OpenID ブール値が 0 に設定されているか、1 に設定されている場合は 1 に設定されているかを確認し、適切な結合で保存した対応する OpenID の詳細を使用します。
私が見つけた最も困難な部分は、OpenID を使用しているユーザーからパスワードを取得してはならない 3 番目のステップでした。これは、データベースの制約に違反していました。登録したい他のユーザーに問題が発生するため、制約を外すことができませんでした。そのため、どうにかして openID ユーザーの制約を回避する必要がありました。最善の解決策ではないかもしれませんが、役立つかもしれません。幸運を!!
必要なのは、使用している OpenID ライブラリから返された ID URL を格納する列だけです。
ユーザーが自分のアカウントに複数の openid を割り当てられるように、列identity
と列のみを持つ別のテーブルにそれを配置することを検討してください。userid