3

モデルUserとProjectがあるとします。ユーザーとプロジェクトはHABTMに関連付けられています。私のセットアップは実際にはこれよりも少し複雑ですが、私の質問の目的のためにこれで十分だと思います。

ここで、omniauthを使用して、Twitter、Facebook、何を使用して特定のプロジェクトを認証したいと思います。omn​​iauth path_prefixを定義する方法を理解しましたが、次のような変数を渡す方法がわかりません。ましてや、config.path_prefix = 'projects/:project_id/auth'project /:project_id / auth / twitter/callbackのようなカスタムコールバックURLを作成します。

4

3 に答える 3

1

これは生産に支障をきたします。開発では、セッション変数を使用することができます。ただし、本番環境では、コールバックURLにproject_idを含める必要があります。これは、異なるauth_project_idに2つ以上登録されている可能性があるため、後でどちらが呼び出されるかを知る方法がありません(コールバックは非同期です)。

https://github.com/mkdynamic/omniauth-facebook#custom-callback-urlpath

config.path_prefix = "projects /#{@ project.id}/auth"のようなものが機能する可能性があります。私は今、同様の状況をテストしています。

于 2013-09-16T11:04:40.867 に答える
0

後世のために、私はそれをこのように解決しました:

authプロジェクトコントローラーにメソッドを追加しました。このメソッドは、セッション変数を設定してsession[:auth_project_id]からにリダイレクトしauth/ + params[:provider]ます。

コールバックコントローラーauthenticationsで、プロジェクトを取得し@project = Project.find(session[:auth_project_id])、認証を作成してsession[:auth_project_id] = nilから、セッション変数の設定を解除しました。

于 2011-04-11T13:00:00.643 に答える
0

私はdeviseomniauthableで同様のことをしました、あなたはリンクでどんなパラメータでもpasすることができます。お気に入り

<%= link_to "Add twitter Account",  user_omniauth_authorize_path(:twitter, params:  { project_id: @project.id     }) %>

次に、コールバックコントローラーで

before_action :set_project, only: [:twitter]

def set_project
  @project = Project.find(request.env['omniauth.params']['project_id'])
end

注:request.env['omniauth.auth']は使用しないでください

于 2016-02-10T09:05:44.787 に答える