omn​​iauth没有注册用户的一些奇怪的原因?

时间:2014-12-30 14:42:41

标签: ruby-on-rails omniauth

您好我尝试使用buffer2通过omniauth创建oauth注册。这是我到目前为止,我现在遇到的问题是我被重定向到new_user_registration_path。

我确实被带到缓冲区网站,我接受该应用程序获得权利。

omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

def buffer
  @user = User.find_for_buffer(request.env["omniauth.auth"], current_user)

  if @user.persisted?
    flash[:notice] = "devise.omniauth_callbacks.success"
    sign_in_and_redirect @user, :event => :authentication
  else
    session["devise.buffer_data"] = request.env["omniauth.auth"]
    redirect_to new_user_registration_url
  end
 end
end

并在模型中:

def self.find_for_buffer(access_token, signed_in_resource=nil)
 data = access_token.info
 user = User.where(:provider => access_token.provider, :uid => access_token.uid).first
  if user
   user
  else
 user = User.create(
                email: data.email,
                 provider: access_token.provider,
                 uid: access_token.uid,
                 password:Devise.friendly_token[0,20]
                 )
  end
 user
end

该网站将我返回到new_user_registration_url,控制台正在说:

INFO -- omniauth: (buffer) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#buffer as HTML
Parameters: {"state"=>"3ee6956fe2d74bf9a114a29cc55c9c70260aba7f0bd402d9",       "code"=>"1/686ea44403ab403d0c6e647338a936f8"}
User Load (0.7ms)  SELECT  "users".* FROM "users"  WHERE "users"."provider" = 'buffer' AND    "users"."uid" = '526362667f9a1f3f5994515a'  ORDER BY "users"."id" ASC LIMIT 1
(0.2ms)  BEGIN
(0.2ms)  ROLLBACK
Redirected to http://localhost:3000/users/sign_up
Completed 302 Found in 108ms (ActiveRecord: 1.0ms)

我还附上了他们提供的api文档的网址,因为我不知道它对我来说没有任何意义,而且我认为他们的文档有点蹩脚 - 好: https://bufferapp.com/developers/api

1 个答案:

答案 0 :(得分:0)

默认使用设计时,您需要向email提供User

您正在请求data.email,但某些OAuth提供商的回复中没有电子邮件,例如Twitter。当我查看文档时,您的提供商似乎没有提供电子邮件。

尝试创建用户手动提供电子邮件,看看会发生什么:

User.create(
  email: "a-manual-entry@domain.com",
  provider: "a-token",
  uid: "1234567890",
  password:Devise.friendly_token[0,20]
)

从这里开始,您有多个选项,但you should begin here