Ruby on Rails:AuthLogic Facebook統合:電子メールアドレスを自動的に使用する代わりに、ユーザー入力とのリンクアカウント

StackOverflow https://stackoverflow.com/questions/4512277

質問

Ruby on RailsのWebアプリを開発しています。 AuthLogicを使用して認証を行います。私のサイトには独自のログインがありますが、Facebookも使用したいと思っています。 authlogic_facebook_connect(Facebookerを使用)を試しました。多くのしゃっくり(ドキュメントは実際には完全に維持されていません)の後、authlogic_facebook_connectを機能させましたが、大丈夫です。デフォルトの「Connect」動作は、以前にサイトで使用したことがないユーザーに直面しているときに完全に機能しますが、Facebookや私のサイトに異なるメールアドレスを使用している人向けの多くの重複ログインが生じます。これが私が欲しいものです:

ユーザーがFacebookの「接続」ボタンにヒットしたとき(および「許可」をクリックするFacebook認証ステップを通過した後)、ユーザーが自分の既存のアカウントに接続するかどうかをユーザーに尋ねるボックスをポップアップしたいサイトまたはアカウントを自動的に生成したい場合。

彼らがそれを自動的に生成したい場合、私たちは良く、私たちは通常どおりに進んでいますが、一方で、彼らが私のサイトのアカウントにFacebookアカウントをリンクしたい場合、私は実際に彼らに入りたいと思っています彼らのローカル資格情報と正しいアカウントを見つけます。言い換えれば、i しない 私のソリューションが正しいアカウントのように見えるどのアカウントを自動的に把握したいので、ユーザーにこれを行いたいです。

authlogic_facebook_connectまたはoauthなどを使用してこれを実行できるgem /プラグイン /クイックハックはありますか?

- デイヴィッド

役に立ちましたか?

解決

他の誰かがこれに最適な宝石をあなたに向けることができるかもしれませんが、私は同様の問題に取り組んでおり、OAuth2 gemに基づいて私たち自身のものを転がすのはそれほど仕事ではなかったことを伝えることができます。

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

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

その後、必要なものを指定できます do_my_custom_user_association, 、あなたは持っているはずです current_user 誰かがログインしている場合はAuthLogicから利用できます。そのため、現在のアカウントまたは別のアカウントにマージするかどうかをユーザーに選択できるフローにリダイレクトできます。現在のユーザーがいない場合は、Facebookデータが添付された状態で、Create Account Flowに送信できます。

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

見る http://developers.facebook.com/docs/authentication/ OAUTH2の相互作用のいずれかが意味をなさない場合。

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