2011-12-01 3 views
1

Я выполняю новое руководство по установке новой версии OmniAuth 1.0.0 с новой версией разработать вРуководство для новой версии 1.5 и разработать OmniAuth 1.0.0 facebook с Mongoid

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Но это руководство его для Mysql, я думаю. Im работает с Mongoid.

У меня есть попытаться обновить запрос для Mongoid синтаксиса:

В omniauth_callbacks_controller.rb

если @ user.persisted? я изменен если @ user.create

В модели user.rb

У меня есть изменения если пользователь = User.find_by_email (data.email) по если пользователь = User .где (электронная почта: (data.email))

проблема заключается в том, что в функции обратного вызова, когда пользователь вернется из Facebook я получаю следующую ошибку:

Could not find a valid mapping for #<Mongoid::Criteria 
    selector: {:email=>"emailusercomebackfacebook"}, 
    options: {}, 
    class: User, 
    embedded: false> 

Любая идея? Где я могу получить руководство или руководство для нового проекта и omniauth для Mongoid?

Спасибо!

+0

Попробуйте поместить карту после того, где и посмотреть, что она возвращает. ('User.where (электронная почта: (data.email)). Map'). –

+0

Я получаю следующее сообщение в контроллере: ** undefined method save for # ** Если я поставлю '@ user.save' или' @ user.create' в условное от контроллера. Если я ставлю 'if @ user', я получаю:' RuntimeError в Users :: OmniauthCallbacksController # facebook Не удалось найти допустимое сопоставление для # "emailusercomebackfacebook" }, options: {}, класс: Пользователь, embedded: false> : map> ' – hyperrjas

ответ

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")

Примечание. Я использую «Dummy Name» выше, вместо этого вы должны получить имя из данных facebook.

+0

Спасибо, теперь отлично работаем. Для работы put: name => "data.name" и работающий нормально: D Задайте его исправленным. Большое спасибо Хосе за исправление этой проблемы с новым камнем: D. С уважением – hyperrjas

0

Попытайтесь получить первый элемент и посмотреть, есть ли он, который вы хотите. Кажется, что Mongoid возвращает Перечислимый с элементами.

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' 

С новым запросом сценарий перейти к еще в , если предложение

Линия, вызывающая ошибку в другом месте:

else # Create a user with a stub password. 
    User.create!(:email => data.email, :encrypted_password => Devise.friendly_token[0,20]) 

Чтобы попытаться создать пользователя с заглушкой пароль