2014-12-30 4 views
0

Привет Я пытаюсь создать регистрацию oauth через omniauth, используя buffer2. Вот что я имею до сих пор, проблема, с которой я сейчас сталкиваюсь, заключается в том, что я перенаправляюсь на путь new_user_registration_path.omniauth не регистрирует пользователя по какой-то странной причине?

Я попал на сайт буферов, где я принимаю, что приложение получает права.

omniauth_callbacks_controller.rb 

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 

def buffer 
    @user = User.find_for_buffer(request.env["omniauth.auth"], current_user) 

    if @user.persisted? 
    flash[:notice] = "devise.omniauth_callbacks.success" 
    sign_in_and_redirect @user, :event => :authentication 
    else 
    session["devise.buffer_data"] = request.env["omniauth.auth"] 
    redirect_to new_user_registration_url 
    end 
end 
end 

и в модели:

def self.find_for_buffer(access_token, signed_in_resource=nil) 
data = access_token.info 
user = User.where(:provider => access_token.provider, :uid => access_token.uid).first 
    if user 
    user 
    else 
user = User.create(
       email: data.email, 
       provider: access_token.provider, 
       uid: access_token.uid, 
       password:Devise.friendly_token[0,20] 
       ) 
    end 
user 
end 

сайт возвращает меня к new_user_registration_url, и консоль говорит:

INFO -- omniauth: (buffer) Callback phase initiated. 
Processing by Users::OmniauthCallbacksController#buffer as HTML 
Parameters: {"state"=>"3ee6956fe2d74bf9a114a29cc55c9c70260aba7f0bd402d9",  "code"=>"1/686ea44403ab403d0c6e647338a936f8"} 
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."provider" = 'buffer' AND "users"."uid" = '526362667f9a1f3f5994515a' ORDER BY "users"."id" ASC LIMIT 1 
(0.2ms) BEGIN 
(0.2ms) ROLLBACK 
Redirected to http://localhost:3000/users/sign_up 
Completed 302 Found in 108ms (ActiveRecord: 1.0ms) 

Я также прикрепил URL для документации апи они предлагают, поскольку я новичок, это не имеет для меня никакого смысла, плюс их документация, на мой взгляд, несколько дерьмовая, как хорошо: https://bufferapp.com/developers/api

+0

Проблема в том, что '@ user.persisted?' Возвращает 'false'. Вы можете видеть в консоли 'ROLLBACK', что означает, что' user' не сохраняется. Вы должны не выполнять проверку пользователя. – ptd

+0

Я пробовал добавить devise_parameter_sanitizer для регистрации, чтобы разрешить, провайдер, uid и пароль. Все еще не работает. Вы не знаете, почему это может быть? – sja

ответ

0

По умолчанию с помощью устройства вы должны указать email на ваш User.

Вы запрашиваете data.email, но некоторые провайдеры OAuth не имеют электронной почты в своем ответе, например Twitter. Ваш провайдер, похоже, не предоставляет электронное письмо, когда я смотрю документацию.

Попробуйте создать пользователя, обеспечивающий электронную почту вручную и посмотреть, что произойдет:

User.create(
    email: "[email protected]", 
    provider: "a-token", 
    uid: "1234567890", 
    password:Devise.friendly_token[0,20] 
) 

здесь, у вас есть несколько вариантов, но you should begin here.

Смежные вопросы