5

ずっと前に、あたかも登録ユーザーであるかのようにすべてを利用できる Web サイト (残念ながらアドレスを失ってしまいました。それはある種の新聞サイトでした) に出くわしました。記事を評価したり、お気に入りに追加したり、コメントしたりできます。投稿すると、投稿を保存するにはウェブサイトに登録する必要があるという目立たない埋め込みメッセージが表示されます。次に、あなたのプロフィールがどのように表示されるかを確認するためのリンクがありました。私のすべてのアクティビティがそこにあることに驚きました。読んで保存した記事、コメントなど。サイトを離れ、後で好奇心から戻ってきたとき、まだアクティビティが保存されていました。

これまでで最高だと思っていたのですが、ソーシャル機能を備えたウェブサイトを構築している今、私もそのアプローチを取りたいと思っています. しかし、私はまだ初心者なので、どうすればいいのかわかりません。どのようにしますか?

4

2 に答える 2

8

Profileサイトにアクセスし、最初のお気に入りを追加し、最初のアイテムを評価するなどのユーザーに対して自動的に作成されるモデルを作成しProfileます。適切にランダムで一意の文字列を含むデータベースに保存する必要があります。この文字列はクライアント側で Cookie として保存でき、後でプロファイルを取得するために使用されます。Cookie を簡単に改ざんして他の匿名の人のプロファイルを取得できないように、ランダムで十分な長さにする必要がありますが、これを完全に回避することはできません (匿名のプロファイルに機密データを保存しないように注意してください!)。

ユーザーが登録すると、そのユーザーProfileを新しいUserレコードに関連付けて、Cookie と一意の文字列識別子を削除できます。Userレコードに基づいて、ログイン時にプロファイルを簡単に取得できるようになりました。

モデルには、Profile保存したい情報を含めることができます。

登録ユーザーと匿名ユーザーを区別したい場合は、AnonymousProfileモデルとProfileモデル (それぞれ異なる属性を持つ) を作成し、誰かが登録したときに、匿名プロファイルからユーザー プロファイルにすべてのデータを単純にコピーできます。

更新: アプリケーション全体で、ユーザーがログインしているときにのみこの情報を使用することを決定できます。before_filter現在のユーザーを取得する を定義し、実際にログインしているユーザーがいる場合にのみ、プロファイル データを使用します。

class ApplicationController < ActionController::Base
  before_filter :fetch_user_data

  def fetch_user_data
    @current_user = ... # Work your magic to get current user
  end

  private

  def current_profile
    @current_user and @current_user.profile  # Use profile association
  end
end

コントローラーアクションのどこか:

if current_profile
  # Do stuff with current_profile
  # Only available to registered users...
end

current_profile気が変わって、匿名ユーザーに対して匿名プロファイルを有効にしたい場合は、後で の実装を変更できます。

于 2009-05-27T21:46:27.140 に答える
2

ユーザーを識別する唯一の方法は、Cookie を使用することです。あなたが使用していたサイトがおそらく行っていることは次のとおりです。

初めてのユーザーは、'users' テーブルにエントリを作成し、それらを 'guests' グループに追加します。後で再度検索できるように、識別子 Cookie をユーザーのマシンに保存します。

ユーザーが登録することを決定した場合は、残りの詳細をユーザー テーブルに入力し (ユーザーの詳細と、ユーザー名/パスワードなどの登録の詳細のために別のテーブルを用意することもできます)、登録済みに追加します。ユーザーグループ。

グループを管理する方法は、データベース内のフラグと同じくらい簡単です。

これはレールの質問なので...

私はおそらくあなたのapplication_controller.rbのbefore_filterでこれのほとんどを処理します. 手順は次のようになります。

if has_cookie
   @user = lookup_user
else
   @user = create_new_guest_user
end

これを行うには、acts_as_authenticated や Clearance などの既存の認証フレームワークの 1 つを非常に簡単に拡張できます。

于 2009-05-27T21:47:01.600 に答える