在Devise和omniauth-google-oauth2注册新用户



我试图管理用户使用谷歌帐户注册我的rails 4.0.0应用程序。并且现有用户可以使用Google帐户登录。但是我在使用Google Oauth 2注册新用户时遇到了一些困难。例如:我有谷歌帐户"example@google.com"。它已登录到我当前的PC上。当我尝试使用此帐户注册到我的应用程序时,它会生成空白的注册表单。如果我不手动提供电子邮件、登录名、全名等 - 我收到错误消息,指出它们"不能为空"。我想解决方案是为文本字段创建默认值以获取用户详细信息。因此,我的问题是,如何为视图中的变量提供等于Google帐户中的变量的值?

新用户注册中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

来自用户模型的全身份验证方法:

  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

我在 GitHub 上遇到了同样的问题,你可以看看我的用户模型

https://github.com/flower-pot/pastebin/blob/master/app/models/user.rb

相关内容

最新更新