3

Noam Ben Ari のすばらしい宝石Sorceryを使用していますが、理解できない問題があります。

Facebook ログインはローカル サーバーでは正常に機能しますが、Heroku では機能しません。

2011-10-03T03:50:21+00:00 app[web.1]: Started GET "/oauth/callback?  provider=facebook&code=AQAJ-kjae6XnC-4R82G3DlaYseLxKFK09t9EN5Cwk-MuoctkE1iiY- tKVGM1n9YkUjhyjmhZptdOkxyytFWgFHB2RlihH1S3FdsysmKLlw7UztqczyLys_plQIRdF7YzRUi0dGqynn9j9rkqHNK7 KWqswT62usruyumS0m0d4LRCauCnPQ-SPtrNrFRdeWe0Aww" for 154.5.97.249 at 2011-10-03 03:50:21 +0000
2011-10-03T03:50:21+00:00 app[web.1]:   Processing by OauthsController#callback as HTML
2011-10-03T03:50:21+00:00 app[web.1]:   Parameters: {"provider"=>"facebook", "code"=>"AQAJ-kjae6XnC-4R82G3DlaYseLxKFK09t9EN5Cwk-MuoctkE1iiY- tKVGM1n9YkUjhyjmhZptdOkxyytFWgFHB2RlihH1S3FdsysmKLlw7UztqczyLys_plQIRdF7YzRUi0dGqynn9j9rkqHNK7 KWqswT62usruyumS0m0d4LRCauCnPQ-SPtrNrFRdeWe0Aww"}
2011-10-03T03:50:21+00:00 app[web.1]: Completed 500 Internal Server Error in 841ms

0-03T03:50:21+00:00 app[web.1]:
2011-10-03T03:50:21+00:00 app[web.1]: NoMethodError (undefined method 'load_from_provider'   for #<Class:0x00000003fd4190>):
2011-10-03T03:50:21+00:00 app[web.1]:   app/controllers/oauths_controller.rb:12:in  'callback'
2011-10-03T03:50:21+00:00 app[web.1]:
2011-10-03T03:50:21+00:00 app[web.1]:
2011-10-03T03:50:21+00:00 app[web.1]: cache: [GET /oauth/callback?provider=facebook&code=AQAJ-kjae6XnC-4R82G3DlaYseLxKFK09t9EN5Cwk-MuoctkE1iiY-tKVGM1n9YkUjhyjmhZptdOkxyytFWgFHB2RlihH1S3FdsysmKLlw7UztqczyLys_plQIRdF7YzRUi0dGqynn9j9rkqHNK7KWqswT62usruyumS0m0d4LRCauCnPQ-SPtr

Rails 3.1.0、Sorcery 0.6.1 で彼自身のサンプル コードを使用しています。

犯人のコントローラーは次のとおりです。

class OauthsController < ApplicationController
  skip_before_filter :require_login

  def oauth
    login_at(params[:provider])
  end

  def callback
    provider = params[:provider]
    if @user = login_from(provider) # <<<< this is the faulty line #12
      redirect_to root_path, :notice => "Logged in from #{provider.titleize}!"
    else
      begin
        @user = create_from(provider)
        reset_session # protect from session fixation attack
        login_user(@user)
        redirect_to root_path, :notice => "Logged in from #{provider.titleize}!"
      rescue
        redirect_to root_path, :alert => "Failed to login from #{provider.titleize}!"
      end
    end
  end

end

ローカルサーバーで正常に動作します。サーバーで Heroku ログを読み取る以外に、エラーを追跡する方法はありますか?

4

1 に答える 1

0

次の 2 つの問題が考えられます。

  1. ここで説明されているソリューションとの非互換性の問題https://github.com/NoamB/sorcery/issues/147 )

  2. user_classソーサリー初期化子の設定がありません。Sorcery はload_from_provider、次のように構成で指定する必要がある User クラスのメソッドを定義しますconfig.user_class = UserGithubでコードを見ることができます

問題が解決したことを願っています! 乾杯 ;)

于 2014-03-19T11:25:51.333 に答える