我正在关注安装新版本omniauth 1.0.0的新手册,其中包含
中的新版本https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
但是我认为这本手册适用于Mysql。我正在使用 Mongoid。
我已尝试更新mongoid语法的查询:
在 omniauth_callbacks_controller.rb
中如果 @ user.persisted?我已更改如果@ user.create
在模型 user.rb
中我已经如果user = User.find_by_email(data.email)更改了如果用户= User.where(email:(data.email))
问题是,当用户从Facebook回来时回调中我得到了下一个错误:
Could not find a valid mapping for #<Mongoid::Criteria
selector: {:email=>"emailusercomebackfacebook"},
options: {},
class: User,
embedded: false>
有什么想法吗?我在哪里可以获得Mongoid新设计和omniauth的指南或手册?
谢谢!
答案 0 :(得分:4)
是的,您需要做两处更改:
1)User.find_by_email(data.email)
需要User.where(:email => data.email).first
2)User.create!(:email => data.email, :encrypted_password => Devise.friendly_token[0,20])
需要User.create!(:email => data.email, :password => Devise.friendly_token[0,20], :name => "Dummy Name")
注意我上面使用“虚拟名称”,你应该从facebook数据中获取名称。
答案 1 :(得分:0)
尝试获取第一个元素,看看它是否是您想要的实例。 Mongoid似乎正在返回带有元素的Enumerable。
答案 2 :(得分:0)
我已将下一个查询添加到模型中:
if user = (User.where(email:(data.email)).map.first)
现在错误发生在模型中:
Mongoid::Errors::Validations in
Users::OmniauthCallbacksController#facebook
Validation failed - Password can't be blank, Name can't be blank.
Rails.root: /home/ubuntu/Desktop/app
Application Trace | Framework Trace | Full Trace
app/models/user.rb:21:in 'find_for_facebook_oauth'
app/controllers/users/omniauth_callbacks_controller.rb:4:in 'facebook'
使用新查询,脚本会转到 if 句子中的 else
在else中产生错误的行是:
else # Create a user with a stub password.
User.create!(:email => data.email, :encrypted_password => Devise.friendly_token[0,20])
尝试使用存根密码创建用户