- ユーザーは、従来の電子メールとパスワードでログインします。
- そのユーザーは「Facebook に接続」ボタンをクリックします。
- 彼らは、現在私のサイトにログインしているメール アドレスとは異なるメール アドレスを使用して facebook で認証します。
- Facebook のメールを使用するように従来のログインを更新するかどうかを尋ねるページを提示します (Facebook を使用してアカウントを統合し、不足しているデータを入力することもできます)。
sessions#create
omniauth コールバック 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つのリクエストで認証できます行われました)、しかし、私はそれをページに保存したくありません...