2011-10-20 5 views
6

私はdevise/omniauthを使ってfacebook認証を行っています。しかし、私は既存の(facebook以外の)ユーザーが彼のアカウントをfacebookに接続する能力を持つフローを追加したいと思います。これには、異なるFacebookの権限が必要です。私は工夫構成ファイルで指定されたものとは異なる(ユーザから現在のユーザーをログアウトせずに二つのことomniauthをfacebookに使用すると、別の権限を持つ既存のユーザーに接続する

Facebookは接続要求するために工夫/ omniauthを使用する方法
  1. 要求異なる拡張権限を見つけるように見えることはできません)

1へ

答えて

2

回答のおかげで非常に簡単です:ちょうどomniauth_callbacks_controllerにあればパスを追加します::この

# If a user is signed in then he is trying to link a new account 
    if user_signed_in? 
     if authentication.persisted? # This was a linking operation so send back the user to the account edit page 
     flash[:success] = I18n.t "controllers.omniauth_callbacks.process_callback.success.link_account", 
           :provider => registration_hash[:provider].capitalize, 
           :account => registration_hash[:email] 
     else 
     flash[:error] = I18n.t "controllers.omniauth_callbacks.process_callback.error.link_account", 
           :provider => registration_hash[:provider].capitalize, 
           :account => registration_hash[:email], 
           :errors =>authentication.errors 
     end 
     redirect_to edit_user_account_path(current_user) 

ようprocess_callback方法は、これは私が自分のアプリケーションに何をすべきかであり、それは正常に動作します。

質問2について私は2種類のFacebook認証構成をサポートする方法はわかりませんが、「facebookを使ってサインインする」と「リンクを使用してサインイン」の両方のパスで一貫性のある体験が必要なので、 Facebookへのあなたのアカウント "。 (まだこの道を追求したいのであれば、私が探求する1つのアイデアは、独立したキーと設定で新しいFacebookのアプリケーションを作成することです...)

+1

「一貫性のある経験が必要なのでユーザーにとってどのように役立つのかよく分かりません」と答えています。サイトには、より多くのアクセス権しか必要としない機能があります。例えば、私たちは最低限の許可を求めます。しかし、何かをもっと欲しいものにするには(たとえば、プロファイルからいくつかの詳細を得るなど)、より多くのアクセス権を要求する必要があります。 – katzmopolitan

0

複数の層のアクセス許可を実装する簡単な方法の1つは、Facebook Javascript SDK(必要に応じてomniauthに加えて)を使用することです。必要な権限を指定する別の "scope"パラメータを指定するだけで、それぞれの呼び出しで簡単に指定できます。私がやっていることは、ユーザがomniauthを介して接続して(したがって、DBにデータを保存して)の後にのomniauthに基本セットを提供することです。さらに権限が必要な場合は、JSベースのボタン拡張された権限セットを提供します。ユーザーが許可した特定のアクセス許可を確認する場合は、me/permissions API呼び出しを使用するだけです。

関連する問題