sql >> データベース >  >> RDS >> Database

外部サービスでログインする

    ユーザー名とパスワードの入力はアカウントにアクセスする1つの方法ですが、それだけではありません。この記事では、データベースにログインするときに外部サービス(GoogleやFacebookなど)を有効にする方法を説明します。

    外部サービスログインとは何ですか?

    ユーザーに外部サービスを介してシステムアカウントにアクセスするオプションを提供することは、Webデザイナーの間で成長している傾向です。このオプションには、覚えておくべき名前とパスワードの組み合わせが1つ少なくなるなど、いくつかの利点があります。また、管理者がユーザーエクスペリエンスをパーソナライズするのにも役立ちます。

    Webアプリケーションが外部サービスログインを提供する場合、ログイン画面は次の図のようになります。ユーザーはログインとパスワードを入力するか、ボタンをクリックして選択したサービス(Facebook、Twitter、Googleなど)にリダイレクトし、そこでログインして元のアプリケーションにリダイレクトすることができます。

    VertabeloAcademyのログイン画面の例を次に示します。

    外部ログインの仕組み

    外部ログインサービスを追加するには、開発者による追加の作業が必要です。最も人気のあるソーシャルメディアサービスは、 OAuth 2.0と呼ばれるプロトコルを使用します 。 TwitterのみがOAuth1.0と呼ばれる古いプロトコルを使用しています 。このプロトコルにより、氏名、電子メール、性別などのユーザー情報を読み取ることができます。利用できる正確な情報は、ソーシャルメディアサービスおよびユーザーが提供したものによって異なります。 (たとえば、メールアドレスが添付されていないFacebookアカウントを持つことは可能です。)ただし、データベースの設計にこのシステムを実装する方法に焦点を当てます。

    出発点として、パスワードの回復と電子メールの確認に関する以前の記事をベースとして使用します。この記事のユーザー関連の表は次のとおりです。




    外部ログイン用のデータベースの設計

    user_account 表は、認証の処理に関連し、さらにパスワードのリマインダーや電子メールの確認などの関連機能を独自に処理します。ユーザーが外部サービスで認証する場合、これらの列は必要ありません。パスワードのリマインダー、電子メールの確認、およびその他の機能は、外部サービスによって処理されます。設計の最初のステップは、user_account テーブルを2つのテーブルに分割:user_account およびuser_profile

    user_account テーブルは、すべての独自の認証簿記を処理するようになりました。 user_profile 表は、実際のユーザー情報(名前、電子メール、タイムゾーン、利用規約など)を表します。これで、すべてのビジネステーブルがuser_profile テーブル。

    次に、外部アカウントに移ります。 OAuth プロトコルは、最終的に、システム内のユーザーの識別子を提供します。 この識別子は外部システムでのユーザーの名前ではありません。 これは、アプリケーションの単なる識別子です。この内部IDをデータベースに保存する必要があります。 null許容列を追加できますfacebook_idgoogle_idtwitter_id 、などをテーブルuser_profile 。しかし、私たちは別のことをします。

    新しいテーブルを追加します:facebook_accounttwitter_accountgoogle_account 、外部IDを保存します。このようにして、必要に応じて、ソーシャルWebサイトごとに特別な情報を追加できます。別のソーシャルWebサイトにログインの可能性を追加する場合、user_profile テーブル。別のexternal_service_account テーブル。

    新しいテーブルはそれぞれ、同じ列形式を共有します。そのうちの1つはint user_profile_id 、これは両方ともuser_profile テーブルと主キー。 (システム内の2つのアカウントを同じ外部サービスの複数のアカウントに関連付けることはできないため、これは主キーとして機能します。)

    もう1つの列は、外部アカウントのID – facebook_idになります 、 例えば。各facebook_idには固有の制約があります 、google_id 、およびtwitter_id 列。 2つのアカウントに同じIDが与えられていないことはわかっています。実際、ユーザーが外部サービスで認証されると、facebook_idがわかります。 。 facebook_account テーブルを作成し、適切なuser_profile 、システムにログインしたばかりのユーザーがわかります。このIDの行がない場合は、user_profile テーブル、および適切なアカウントテーブルの新しい行。

    最終的なモデルは次のとおりです。





    1. SQLServerの欠落インデックス

    2. OracleのROUND(date)関数

    3. 壊れたUTF-8エンコーディングの修正

    4. MySQLのパフォーマンス:MySQL/MariaDBインデックス