5

Omniauth と Devise を使用して Facebook でログインしようとすると、passthruの代わりに が呼び出されfacebookます。を渡すにはどうすればよいですかlink_to

user_omniauth_authorize_path(:facebook)

私は何度もコードを修正し、このルートを使用しようとしました:

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } do
    get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
  end

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 

しかし、エラーは同じです。facebook私は私の中にアクションを持っていますusers/omniauth_callbacks_controller.rb

4

4 に答える 4

3

私はまったく同じ問題に何時間も悩まされ、github oauthを使用して別のブランチでまったく同じプロセスを実行するなど、すべてを試しましたが、問題なく機能しました。最終的にうまくいったのは、アプリのトークンとシークレットの後に、devise.rb の config.omniauth に渡していた引数のハッシュを変更することでした。それをname: 'google'していたのです。コメントアウトすると動作します:

config.omniauth :google_oauth2, 'ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"],
   {
    # name: 'google',
    scope: 'calendar, plus.login plus.me'
  }

ID とシークレットがハードコードされているかどうかは影響しません。私はそれを試しませんでしたが:name、プロバイダーがコードの他の場所で の代わりに使用するためのエイリアスとして使用されているようです:google_oauth2。コメントを外して(冗長に)変更すると機能しname: google_oauth2ます。あなたはそれを解決したか、1年後に先に進んだと確信していますが、これが将来誰かに役立つことを願っています.

onmiauth-google-oauth2 0.2.5

工夫 3.4.0

レール4.1.6

于 2014-10-30T03:56:56.720 に答える
0

ルートpassthruは omniauth の過去からの古い遺物です。

次のようにルートを設定するだけです。

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
于 2013-07-11T02:42:44.923 に答える
0

devise.rb に設定を追加しましたか?
(config/initializers/devise.rb)でプロバイダーを宣言し、それを要求する必要があります

require "omniauth-facebook" 
config.omniauth :facebook, "APP_ID", "APP_SECRET"

サーバーも再起動する必要があります。

于 2013-10-10T15:42:58.493 に答える