Руководство для новой версии devise 1.5 и omniauth 1.0.0 facebook с Mongoid - PullRequest
1 голос
/ 01 декабря 2011

Я следую новому руководству по установке новой версии omniauth 1.0.0 с новой версией devise в

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

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

Я пытаюсь обновить запрос для синтаксиса Mongoid:

In omniauth_callbacks_controller.rb

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

В модели user.rb

У меня есть изменение , если user = User.find_by_email (data.email) на , если user = User.where (email: (data.email)) *

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

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

Есть идеи?Где я могу получить руководство или руководство для нового устройства и всевозможных правил для Mongoid?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Да, вам нужно сделать два изменения:

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 голосов
/ 01 декабря 2011

Я добавил следующий запрос к модели:

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 в , если предложение

Строка, которая выдает ошибку в else:

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

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

0 голосов
/ 01 декабря 2011

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

...