4

アプリでDevise Invitableを使用しておりOmniauth、ユーザーが Facebook でサインインできるようにしています。

私が問題を抱えている唯一のことは、ユーザーが招待承認ページ内のリンクを使用して Facebook でサインインすることを選択した場合、いくつかの詳細が既に入力された状態で新規ユーザー登録ページにリダイレクトされることです。 Invitable は、招待状を送信するときに新しいユーザーを作成します。ユーザーは、招待状の送信時に提供された電子メールを使用してログインできません。

Omniauth Callbacks Controller

def all
  user = User.from_omniauth(request.env["omniauth.auth"])
  if user.persisted?
    flash.notice = "Signed in!"
    sign_in_and_redirect user
  else
    session["devise.user_attributes"] = user.attributes
    redirect_to new_user_registration_url
  end
end
alias_method :facebook, :all
4

1 に答える 1

0

あなたは問題を診断しました。つまり、のようなものがありますが、実際にUserはそうではありません。これに該当するかどうかを検出し、Facebook から収集したデータで記録を更新する必要があります。

if user.persisted?
  flash.notice = "Signed in!"
  sign_in_and_redirect user
elsif user.previously_invited?
  invited_user = User.where(email: user.email).first
  invited_user.attributes = user.attributes
  invited_user.save
  sign_in_and_redirect invited_user
else
  session["devise.user_attributes"] = user.attributes
  redirect_to new_user_registration_url
end

User#previously_invited?読者への演習として残されていwhereますが、クエリに含まれるいくつかの工夫が必要な維持されたフィールドを持つ電子メールのルックアップが含まれます。

devise-invitable はinvited_user、このアクションの後に調整が必要な可能性がある多くのフィールドを保持しているため、これが完全な解決策になる可能性は低いです。招待が成就したと認識するかどうかは、あなた次第です。この理由から、devise-invitable 以外の招待用の別のメカニズムに移行するのに十分な場合があります。

于 2015-10-23T19:19:57.513 に答える