您好我尝试使用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
答案 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。