2013-11-07 2 views
0

Я пытаюсь управлять подпиской пользователя с учетной записью google для моего приложения rails 4.0.0. Разработчик работает отлично. И есть действующий вход с учетной записью Google для существующих пользователей. Но у меня есть некоторые трудности с регистрацией нового пользователя с помощью Google Oauth 2. Например: у меня есть учетная запись google «[email protected]». Он зарегистрирован на моем текущем ПК. И когда я пытаюсь зарегистрироваться с этой учетной записью в своем приложении, она генерирует пустую регистрационную форму. Если я не буду вручную отправлять электронную почту, логин, полное имя и т. Д. - у меня есть сообщение об ошибке, что они «не могут быть пустыми». Я предполагаю, что решение создает значение по умолчанию для текстовых полей для получения сведений о пользователе. Итак, мой вопрос в том, как я могу предоставить значения для переменных, которые равны переменным из учетной записи google?Регистрация новых пользователей с помощью Devise и omniauth-google-oauth2

Email поле в form_for в новой регистрации пользователя:

= 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 
+0

Показать конфигурацию omniauth. – Ashitaka

ответ

Смежные вопросы