2012-10-16 11 views
5

Chúng tôi đã đăng ký và đăng nhập qua facebook bằng cách sử dụng đường ray, phát minh và omniauth. Chúng tôi được lưu trữ trên Heroku, chạy hai dynos web.đưa ra + omniauth facebook: current_user nil sau khi sign_in

đôi khi đăng nhập bằng facebook không thành công. Sự bắt tay thực sự giữa ứng dụng của chúng tôi và facebook là tốt. Trong thực tế, trong mã dưới đây @user là một thực thể mô hình người dùng thực tế, các dữ liệu omniauth Hash chứa tất cả các dữ liệu từ FB, sign_in có vẻ thành công và current_user được thiết lập.

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def facebook 
    @user = User.find_for_facebook(env["omniauth.auth"].extra.raw_info, current_user) 

    logger.info ">>>>>> OMNIAUTH FB BEGIN >>>>>>" 
    logger.info env["omniauth.auth"].inspect 
    logger.info "User is: #{@user.inspect}" 

    session["devise.facebook_data"] = request.env["omniauth.auth"].except("extra") 

    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 
    res = sign_in(:user, @user) 

    logger.info "Sign In Result: #{res.inspect}" 
    logger.info "CURRENT_USER: #{current_user.inspect}" 
    logger.info "<<<<<< OMNIAUTH FB END <<<<<<" 

    respond_to do |format| 
     format.json 
    end 
    end 
end 

Phía máy khách thực hiện chuyển hướng (các hành động khác nhau dựa trên ngữ cảnh đăng nhập) đến một URL khác trên trang web của chúng tôi khi đăng nhập thành công. Tại URL đó, chúng ta kiểm tra current_user ... nhưng current_user đang trả về nil. Nếu quá trình đăng nhập được lặp lại một vài lần, cuối cùng nó hoạt động.

Chúng tôi đang ở trên

  • Rails 3.2
  • lập mưu 2.1.2
  • Omniauth-facebook 1.4.0
  • của Ruby 1.9.3 p194
+0

có một vấn đề rất giống nhau (trong tôi current_user luôn luôn là nil). Một số người đề nghị chuyển sang chế độ bảo vệ giả mạo, hãy xem tại đây: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#google – chrmod

+0

Vui lòng gửi định nghĩa find_for_facebook của bạn từ mô-đun Người dùng của bạn. – xvidun

+0

Đây là một hướng dẫn hay: http://sreeharikmarar.blogspot.com/2013/01/omniauth-devise-authentication-using.html – duykhoa

Trả lời

-2

tôi không biết đây có thực sự là giải pháp cho những gì bạn đã mô tả hay không, nhưng tôi tự hỏi liệu điều này:

@user = User.find_for_facebook (env [ "omniauth.auth"]. Extra.raw_info, CURRENT_USER)

nên đọc như thế này?

@user = User.find_for_facebook (request.env [ "omniauth.auth"]. Extra.raw_info, CURRENT_USER)

đó là cách tôi là anyways. NOt thực sự chắc chắn rằng sẽ giải thích lý do tại sao ứng dụng của bạn tùy ý cho phép người dùng đăng nhập.