Rails 4.0.0 アプリの Google アカウントでユーザー サインアップを管理しようとしています。工夫は完璧に機能します。また、既存のユーザーは Google アカウントでサインインできます。しかし、Google Oauth 2 を使用して新規ユーザーを登録する際に問題があります。たとえば、Google アカウント「example@google.com」を持っています。現在のPCにログインしています。このアカウントでアプリにサインアップしようとすると、空白の登録フォームが生成されます。電子メール、ログイン、氏名などを手動で提供しないと、「空白にすることはできません」というエラー メッセージが表示されます。解決策は、ユーザーの詳細を取得するためにテキスト フィールドにデフォルト値を作成することだと思います。それで、私の質問は、Googleアカウントの変数と等しいビューで変数の値をどのように提供できますか?
新規ユーザー登録の form_for の Email フィールド:
= f.email_field :email, :autofocus => true, :value => 'how can i put auth.info.email here?'
omniauth_callbacks_controller.rb:
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def google_oauth2
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
flash.notice = "Signed in Through Google!"
sign_in_and_redirect user
else
session["devise.user_attributes"] = user.attributes
flash.notice = "You are almost Done! Please provide a password to finish setting up your account"
redirect_to new_user_registration_url
end
end
end
ユーザーモデルからの omniauth メソッド:
def self.from_omniauth(auth)
if user = User.find_by_email(auth.info.email)
user.provider = auth.provider
user.uid = auth.uid
user
else
where(auth.slice(:provider, :uid)).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.full_name = auth.info.name
user.email = auth.info.email # THIS (user.email) value i want to provide to my registration form as default value
user.birthday = auth.info.birthday
user.avatar = auth.info.image
end
end
end