2009-10-08 25 views
7

これはデータベースに関する質問です。 openidライブラリがすでにインストールされ、動作しています。OpenID情報をデータベースに保存する

私が取り組んでいるウェブサイトでOpenIDを使いたいです。ユーザーには3種類あります。これらのユーザーのすべてが単純に同じテーブルに格納されている

を認証するためのOpenIDを使用して

  • 匿名アカウントを認証するためのOpenIDを使用して
  • 名前付きのアカウントを認証するために、電子メール/パスワードを使用してアカウントを名前付き

    1. コメントテーブル名前付きアカウントは、アカウントが管理できるブログにリンクされています。匿名ユーザーはブログの記事にコメントすることができますが、何もできません。匿名ユーザーがアカウントにサインアップすると、そのユーザーの古いコメントを指定されたアカウントに自動的に転送したいと考えています。私は現在、ユーザーが一意の名前と有効な電子メールでフォームに記入するようにしています。

      現在、両方のアカウントのセットは、次のスキーマを使用して同じテーブルに格納されています。私はこれを使用してい

      create_table :users do |t| 
          t.string :name #unique because it maps to a subdomain 
          t.string :openid_url #unique 
          t.string :email #unique 
          t.string :password_hash 
          t.string :password_salt 
          t.boolean :guest #Anonymous user flag 
      
          t.timestamps 
      end 
      

      openid_urlが同じのOpenIDに接続されることから、複数のアカウントを防ぐためにユニークである。ユーザーは、電子メール/パスワードでログインするのでemailが一意である)

      (はい、それはレールの移行です)私はGoogleのOpenID実装に問題がありました。 Google for OpenIDを使用するすべてのユーザーは、同じURL:https://www.google.com/accounts/o8/udを持っています。

      URLは各ユーザーごとに一意ではないため、Googleをopenidプロバイダとして使用するにはどうすればサポートできますか? (存在する制約を覚えておいてください)

      注:Googleアカウントはインターネット上の任意の有効なメールアドレスを使用できますので、[email protected]をopenid_urlフィールドに格納することはできません。 comまたは悪い[email protected]! Yahooもこの単一URLメソッドを使用しているため、それらもサポートする必要があります。

  • +0

    なぜ電子メールアドレスが一意であるとお考えですか?彼らはそうではないかもしれない。 2番目のopenidログインが表示され、ユーザーが既に持っているものと同じ電子メールアドレスを主張するとどうなりますか? –

    +0

    電子メールはopenidを使用していない名前付きアカウント用です。 openidを独占的に使用するように私のアプリケーションを変更しました。 (十分な人にはgoogle/yahooアカウントがあると思うので、これに問題はありません)。 – epochwolf

    答えて

    8

    openid.claimed_idの値を格納します。ユーザーごとに一意です。 Google OpenIDは本当にユニークです。それらはすべて同じ値から始まりますが、ユニークな?id=uniquenesshereクエリーストリングがあります。これらの値は大文字と小文字を区別する必要がありますので、大文字と小文字を区別しないで保存してください。

    あなたが与えた理由でメールアドレスが一意であるとは思っておらず、また多くのプロバイダでは電子メールアドレスが事前確認されていない(またはプロバイダがそれを信じることができない)ので、電子メールアドレスに格納することは、ユーザーの身元を盗むための確実な方法です。

    -1

    ここではopenid_urlは必要ありません。ユーザーIDまたは名前(ユニーク)のみが両方のアカウントで動作します。 UserAccountテーブルからopenidとuseridで別のテーブルを作成することもできます。

    関連する問題