3

私はRubyonRailsでWebアプリを開発しています。認証を行うためにauthlogicを使用しています。私のサイトには独自のログインがありますが、Facebookも使用したいと思っています。authlogic_facebook_connectを(Facebookerを使用して)試してみました。多くの問題が発生した後(ドキュメントが完全に維持されていない)、authlogic_facebook_connectを機能させることができ、問題はありません。デフォルトの「接続」動作は、これまでサイトで使用したことがないユーザーに直面した場合に完全に機能しますが、Facebookと私のサイトで異なる電子メールアドレスを使用しているユーザーのログインが重複する結果になります。これが私が欲しいものです:

ユーザーがFacebookの[接続]ボタンを押すと(そして、[許可]をクリックするFacebook認証ステップを実行した後)、ユーザーに既存のアカウントに接続するかどうかを尋ねるボックスがポップアップ表示されます。サイトまたは彼らが彼らのために自動的に生成されたアカウントを持ちたい場合。

彼らが自動的に生成することを望んでいる場合、私たちは問題なく、通常どおり続行しますが、一方で、Facebookアカウントを私のサイトのアカウントにリンクしたい場合は、実際に入力してもらいますローカルの資格情報を取得し、正しいアカウントを見つけます。言い換えれば、どのアカウントが正しいアカウントに見えるかをソリューションが自動的に判断するのではなく、ユーザーにこれを実行してもらいたいのです。

authlogic_facebook_connectまたはOAuthまたは他の何かを使用してこれを実行できるようにするgem/プラグイン/クイックハックはありますか?

-デビッド

4

1 に答える 1

3

他の誰かがこれに最適な宝石を紹介できるかもしれませんが、私は同様の問題に取り組んでおり、oauth2宝石に基づいて私たち自身を転がすのはそれほど手間がかかりませんでした。

これが私が使用するコード/フローのスケッチです。

1)ユーザーが[Facebookに接続]をクリックすると、次のようなアクションが表示されます

def to_facebook
    options = {
      :redirect_uri => facebook_callback_url,
      :scope => "email,publish_stream" # whatever you want to do
    }
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)

    redirect_to client.web_server.authorize_url(options)
end

2)ユーザーがFacebookにアクセスして、必要なすべてのアクセス権を付与すると、Facebookは指定されたコールバックを呼び出し、次facebook_callback_urlのようなアクションに移動します。

def facebook_callback
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
    access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url)

    do_my_custom_user_association(access_token)
end

次に、必要なものを指定できます。誰かがログインしている場合はauthlogicから利用できるようdo_my_custom_user_associationにする必要がありcurrent_userます。これにより、ログインしているユーザーが現在のアカウントまたは別のアカウントにマージするかどうかを選択できるフローにリダイレクトできます。現在のユーザーがいない場合は、Facebookデータを添付して、アカウント作成フローに送信できます。

これは単なるスケッチであり、処理するエラーケースがあり(たとえばerror_reason、失敗した場合はfacebook_callbackがparamでヒットしget_acccess_tokenます)、コントローラーですべてのoauth2インタラクションを実行することはお勧めしませんが、基本的な考え方はそこにあります。

oauth2の相互作用のいずれかが意味をなさない場合は、http: //developers.facebook.com/docs/authentication/を参照してください。

于 2010-12-22T19:17:34.937 に答える