DevizesとOmniauthを使用して認証を処理するRailsアプリケーションがあります。私はomniauth_callbacks_controllerのプロバイダからコールバックを受けています。ここで認証が既に存在するかどうか、プロバイダが指定した電子メールを持つユーザがすでに存在するかどうかを確認し、必要に応じて新しいユーザを作成します。Devise/Omniauth - 電子メールを含まないプロバイダを扱う方法
各ユーザーに有効なメールが必要です。私の問題はTwitterからのコールバックが付いてくる。 Twitterはそのユーザーのための電子メールを提供しないので、有効なユーザーを作成することはできません。これを解決するために、プロバイダのデータをセッションに保存し、新しい登録ページを送信して、有効なユーザーを作成できるように電子メールアドレスを送信するよう依頼します。このフォームが提出されると、私は問題にぶつかりました。フォームで新しいユーザーが作成されましたが、そのユーザーが既に存在する可能性があります(この場合、そのユーザーに認証を追加する必要があります)。
現時点では、新しいユーザーと同じ電子メールを持つユーザーが既に存在するかどうかを確認しています。もしそうなら、私は新しいユーザーを無視し、既に存在するユーザーに認証を適用します。しかし、これは本当にハッキリと感じます。
どうすればいいですか?
class Users::RegistrationsController < Devise::RegistrationsController
def build_resource(*args)
super
if session[:omniauth]
#If a user with this email already exists then use them instead
existing_user = User.find_by_email(@user.email)
if(existing_user)
existing_user.email = @user.email
@user = existing_user
end
#If there is a session available, we know it contains data for adding an authentication
@user.apply_omniauth_data_as_authentication(session[:omniauth])
#Ensure validations are passed on to next page
@user.valid?
end
end
これを解決できましたか?私は同じ問題を抱えている。 – Finnnn
@Finnnn答えにOmniauthコールバックコントローラを投稿しました。 – Undistraction