2012-02-10 11 views
0

私はユーザーがソーシャルネットワークをシステムにリンクさせる方法としてOmniAuthを使用しています。だから私は共通の一致'/auth/:provider/callback', to: 'authentications#create'私のルートにあります。OmniAuthの起源 -/auth/facebookがどこから呼び出されたか

これは問題なく、特定のユーザーの情報をテーブルに保存します。しかし、私はOmniAuthを使用する別の方法があります。これは、これをオーバーラップさせるべきではありません。ユーザーは/ auth/facebookへの呼び出しを使用してシステムにログインすることができるため、その情報を認証テーブルに格納するだけでなく、ユーザーをシステムにログインさせる必要があります。

一方、ログインしているユーザーはログインせずに自分のFacebookアカウントをリンクしたいだけかもしれませんが、その電話は同じ/auth/facebookに送られます。だから私の質問は:auth/facebookへの呼び出しがどこから行われたのかをどのように発見できますか?

答えて

0

認証コントローラにはbefore_filterというアイデアがあり、ユーザーがすでにサインインしているかどうかを確認するだけです。 #sign_in?は次のようになります。

def sign_in? 
if @oauth.provider == 'facebook' 
    if current_user? 
    # then lets associate this facebook credentials with the logged-in user. 
    else 
    # user isn't logged in, so let's do that 
    sign_in(@authentication.account) 
    end 
end 
end 
+0

これは良いアイデアです。ここでの唯一のことは、Facebookとの取引が別のコントローラの別のアクションでサインアップされていることです。私は見るでしょう。 – Nobita

関連する問題