3

Ruby on RailsでWebアプリケーションを開発しています。私は認証を行うためにauthlogicを使用しています。私のサイトは独自のログインを持っていますが、私もFacebookを使うことを望んでいます。 authlogic_facebook_connect(Facebookerを使用)を試しました。多くの問題が発生した後(私のドキュメントは完全には管理されていませんでした)、authlogic_facebook_connectが動作するようになりました。以前はサイトで使ったことのないユーザーに直面したときに、デフォルトの「接続」動作が完璧に機能しますが、Facebookや自分のサイトで異なるメールアドレスを使用しているユーザーのために重複したログインが発生します。Ruby on Rails:Authlogic Facebookの統合:電子メールアドレスを自動的に使用するのではなく、ユーザー入力でアカウントをリンクする

ユーザーがFacebookの[接続]ボタンをクリックすると(また、[許可]をクリックしてFacebookの認証手順を実行した後に)ユーザーに尋ねるボックスが表示されます自分のサイト上の既存のアカウントに接続するか、アカウント用に自動的にアカウントを作成したい場合に使用します。

自動的に生成されるようにしたいと思っていれば正常ですが、一方では自分のFacebookアカウントを自分のサイトのアカウントにリンクしたい場合は、彼らはローカルの資格情報を入力し、正しいアカウントを見つけることができます。言い換えれば、私は私のソリューションが自動的にどのアカウントが正しいもののように見えるかを知りたい、私はユーザーにこれをやりたい

authlogic_facebook_connectまたはOAuthなどを使用して、この問題を解決するためのgem/plugin/quick hackがありますか?

--David

答えて

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 

次にあなたがdo_my_custom_user_associationで好きな指定することができ、誰かがログインしている場合、あなたはauthlogicから入手current_userを持つべきですログインしたユーザーが現在のアカウントまたは別のアカウントにマージするかどうかを選択できるフローにリダイレクトすることができます。現在のユーザーがいない場合は、Facebookのデータを添付してアカウントを作成してください。これは単なるスケッチであることを

注意、処理するエラーの場合がある(例えばfacebook_callback get_acccess_tokenが失敗した場合のparam error_reasonでヒットします)と私は、あなたが右のあなたのコントローラ内のすべてのOAuth2の対話を行う推薦していませんよ基本的な考え方はそこにあります。

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

+0

優れています。これは完全に機能しています。本当にありがとう。セッションの後半でアクセストークンを再利用するためにアクセストークンを格納する必要があるかどうかを知っていますか? – DavidH

関連する問題