質問

私は、登録ユーザーが作成することができますアプリケーションの作業やコンテンツをアップロードし、匿名ユーザーがコンテンツを視聴しているコンテンツを見つけるために、登録したユーザーのページを閲覧することができますよ - これは、Flickrのようなどのようにサイトに非常によく似ている、のために例では、人々はそのユーザーのページを閲覧することができます。

これを行うために、私は匿名のHTTP GETリクエストでユーザーを識別するための方法が必要です。ユーザーはhttp://myapplication.com/browse/<userid>/<contentid>を入力し、右ページに得ることができる必要があります - ユニークである必要がありますが、プライバシー上の理由から、ユーザーの電子メールアドレスのようなものであってはなりません。

は、Google App Engineを通じ、私は、ユーザーに関連付けられた電子メールアドレスを取得することができますが、私が言ったように、私はそれを使用したくありません。私は、彼らが登録したときに自分のアプリケーションのユーザーは一意のユーザー名を選ぶことができますが、登録プロセスができるだけ短くなるように、私は、まったく可能であればそれをオプションにしたいと思います。

別のオプションは、登録プロセス中にいくつかのランダムなクッキー(GUIDを?)を生成し、それを使用することで、私は、データベースへの旅行なく、そのようなクッキーの一意性を保証する明白な方法が表示されません。

の方法は、このように使用することができ、そのオブジェクトの一意の識別子を取得するApp Engineのユーザーオブジェクト、与えられた、ありますか?

私は、Pythonのソリューションを探しています - 私はGAEも今のJavaをサポートしていることを忘れてしまいました。それでも、私は言語に関係なく、技術が類似していると期待しています。

役に立ちましたか?

解決

あなたのタイミングは非の打ちどころのないです:ちょうど昨日、SDKの新しいリリースでは、<のhref = "http://code.google.com/appengine/docs/python/users/userclass.html#をサポートして、出てきましたUser_user_id」のrel = "noreferrer">ユニークな、恒久的なユーザーIDはを。彼らはあなたが指定したすべての基準を満たしています。

他のヒント

私は、ユーザーの2種類を区別するべきだと思います:

1)Googleアカウント経由でログインしているか、それはすでにGoogle以外のメールアドレスを使用してサイトに登録しているユーザー

2)最初の時間のためにあなたのサイトを開設し、任意の方法でログインしていないユーザー

後者の場合のために、私はいくつかのランダムな文字列(例えばuuid.uuid4()経由またはこのユーザーのセッションクッキーのキーから)、匿名ユーザーとして自身で任意の固有の情報を運ばないを生成するよりも、他の方法を見ることができます。

自分の電子メールアドレス -

でログインしているユーザーの場合は、しかし、あなたはすでに一意の識別子を持っています。私はあなたのプライバシーの問題に同意する - あなたは識別子としてそれを使用するべきではありません。代わりに、どのようにの文字列の生成については、ランダムのようだが、実際には、電子メールアドレスから生成されますか?ハッシング関数は、この目的のために最適です。例:

>>> import hashlib

>>> email = 'user@host.com'
>>> salt = 'SomeLongStringThatWillBeAppendedToEachEmail'

>>> key = hashlib.sha1('%s$%s' % (email, salt)).hexdigest()
>>> print key
f6cd3459f9a39c97635c652884b3e328f05be0f7

hashlib.sha1としては、ランダム関数ではなく、与えられたデータのために常に同じ結果を返しますが、実質的に不可逆的であることが証明され、あなたが安全に、ユーザーの電子メールアドレスを損なうことなく、ウェブサイト上でハッシュされたキーを提示することができます。また、あなたは安全に(彼らがすることができますが、それが起こっての確率は非常に、非常に小さい)の異なる電子メールのない2つのハッシュが同じにならないだろうと仮定することができます。ハッシュ関数の詳細については、Wikipediaのエントリのnoreferrer">

あなたはセッションクッキーを意味するか?

http://code.google.com/p/gaeutilities/ の<を試してみてください/ P> <時間>

何DzinXは語りました。データベースのラウンドトリップなしで認証することができる不透明なキーを作成するための唯一の方法は、暗号化や暗号化ハッシュを使用しています。

ユーザーに乱数を与え、それをハッシュや秘密鍵で暗号化。あなたはまだ、衝突の(小さな)危険を冒すことはできますが、キーの作成時にデータベースに触れる衝突の際に乱数を変更することでこの問題を回避することができます。乱数が暗号化されていることを確認し、選択平文攻撃を防ぐために長いサーバー側の乱数を追加します。

あなたはGoogleドキュメントのキーのようなトークンで終わるだろう、基本的にユーザーを証明する署名は、データベースを触れずに検証することができ、認証されています。

しかし、GAEの価格設定とBigtableのスピードを考えると、あなたが本当にGoogleの独自の認証を使用できない場合は、セッションIDを使用してオフにおそらく方がよいでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top