1
  1. ユーザーは、従来の電子メールとパスワードでログインします。
  2. そのユーザーは「Facebook に接続」ボタンをクリックします。
  3. 彼らは、現在私のサイトにログインしているメール アドレスとは異なるメール アドレスを使用して facebook で認証します。
  4. Facebook のメールを使用するように従来のログインを更新するかどうかを尋ねるページを提示します (Facebook を使用してアカウントを統合し、不足しているデータを入力することもできます)。

sessions#createomn​​iauth コールバック URL がに保存されている認証にヒットするため、問題はステップ 4 にありますrequest.env['omniauth.auth']

の関連ビットsessions_controller:

def create
  return link_accounts if signed_in?

  if params[:email]
    create_session_from_login
  elsif env['omniauth.auth']
    create_session_from_facebook
  else
    redirect_to login_path, alert: "Couldn't login!"
  end
end 

private

def link_accounts
  auth = env['omniauth.auth']
  redirect_to user_link_accounts_path current_user unless current_user.email == auth[:info][:email]
end

...これにより、ユーザーコントローラーに移動し、(a) 別のユーザーとしてサイトにサインインするか、(b) この Facebook 情報を使用するようにアカウントを更新するようユーザーに促す素敵な小さなメッセージが表示されます...ただし、にアクセスできなくなりましたrequest.env['omniauth.auth']

リクエスト間で認証情報を保持するにはどうすればよいですか? それは大きすぎsessionます...ユーザーがページでアクションを実行した後(リンクをクリックするなど)にアクセスできる場所も必要です-実際のFB認証の後にサーバー側の1つのリクエストで認証できます行われました)、しかし、私はそれをページに保存したくありません...

4

0 に答える 0