用于Mongoid的新版本手册和omniauth 1.0.0 facebook

时间:2011-12-01 00:34:13

标签: ruby-on-rails-3.1 devise mongoid omniauth

我正在关注安装新版本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的指南或手册?

谢谢!

3 个答案:

答案 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]) 

尝试使用存根密码创建用户