Omniauth три провайдера


(МАКСИМ МАЙОРОВ) #1

Подключил vk.com, fb.com и google, для omniauth аутентификации. Началась какая то чертовщина. Сначала работает через вк, через гугл ни как. Ребутаю тачку, работает через гугл. Я понимаю, что всё это можно чем то объяснить, но я не знаю чем. Есть метод:

    def self.from_omniauth(auth)
        where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
            user.email = auth.info.email
            user.password = Devise.friendly_token[0,20]
            user.name = auth.info.name
            user.image = auth.info.image
            # user.skip_confirmation!
        end
    end

Если правильно понимаю, он должен добавлять запись в бд, если её нет, но он этого не делает. В таблице такого юзера нет, точно. Вот запросы:

Started GET "/users/auth/google_oauth2" for 127.0.0.1 at 2018-02-11 11:52:12 +0300
I, [2018-02-11T11:52:12.545726 #5795]  INFO -- omniauth: (google_oauth2) Request phase initiated.
Started GET "/users/auth/google_oauth2" for 127.0.0.1 at 2018-02-11 11:52:12 +0300
I, [2018-02-11T11:52:12.667587 #5795]  INFO -- omniauth: (google_oauth2) Request phase initiated.
Started GET "/users/auth/google_oauth2/callback?state=ключ&code=ключ" for 127.0.0.1 at 2018-02-11 11:52:15 +0300
I, [2018-02-11T11:52:15.239618 #5795]  INFO -- omniauth: (google_oauth2) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#google_oauth2 as HTML
  Parameters: {"state"=>"здесь ключ", "code"=>"здесь ключ"}
  User Load (1.4ms)  SELECT  `users`.* FROM `users` WHERE `users`.`provider` = 'google_oauth2' AND `users`.`uid` = 'ключ' ORDER BY `users`.`id` ASC LIMIT 1
   (0.1ms)  BEGIN
   (0.3ms)  ROLLBACK
Redirected to http://localhost:3000/users/sign_up
Completed 302 Found in 165ms (ActiveRecord: 1.8ms)

Когда это работает, вместо ROLLBACK запрос UPDATE
И для порядка последний метод, который в этом участвует, создан для каждого прова, отличается только session[“devise.facebook_data”], для других провов там вместо facebook подставленны другие значения:

  def facebook
    @user = User.from_omniauth(request.env["omniauth.auth"])

    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication
    else
      session["devise.facebook_data"] = request.env["omniauth.auth"].except("extra", "credentials")
      redirect_to new_user_registration_url
    end
  end

Может кто сталкивался с подобными проблемами, поделитесь мыслями.


(МАКСИМ МАЙОРОВ) #2

Простите меня, за такие яростные вбросы. Искал проблему почти два дня. Уже второй раз, после поста здесь, нахожу ответ сам. Не там искал.