2

アプリケーションがアカウントを使用することを承認するために、ユーザーを twitter に送信します。

ユーザーがサインインをクリックして正しく認証されると、ユーザーは失敗メソッドに送信されます。返されたハッシュを介して、oauth_token引き続きアクセスできます。oauth_token_secret(私には奇妙に思えますか?)

ユーザーがサインインをクリックするかキャンセルをクリックするかにかかわらず、それらは常に失敗メソッドに送り返されます。

正しく認証されているのに、成功メソッドに送信されないのはなぜですか?

使用しようとしたルートファイルで

devise_for :users, :controllers => { :registrations => 'registrations',
                                     :omniauth_callbacks => "authentications" }

ただし、create メソッドは呼び出されず、常に失敗メソッドが呼び出されます。

私は何を間違っていますか?

編集: authentications_controller.rb

class AuthenticationsController < Devise::OmniauthCallbacksController

  def create
    render :text => 'yes'
  end

  def failure
    render :text => request.env['omniauth.auth']
  end

  alias_method :twitter, :create
end

ルート.rb

MyApp::Application.routes.draw do
  resources :authentications
  devise_for :users, :controllers => { :registrations => 'registrations', 
                                       :omniauth_callbacks => "authentications" }
  resources :users
end
4

1 に答える 1

2

純粋な OmniAuth を使用していませんが、Devise も使用しているため、状況は少し異なります。

  1. 次のルートを定義する必要はありません。

    match '/users/auth/:provider/callback' => 'authentications#create'

  2. Devise は、名前がプロバイダーのものと一致するメソッドを自動的に呼び出します。したがって、Twitter でログインしている場合は、twitter方法が必要です。Facebook でログインしている場合は、facebookメソッドが必要です。

この区別を望まず、すべての認証を同じメソッド (例: ) に送信したい場合は、コントローラーの最後createに次を追加できます。

# authentications_controller.rb
alias_method :facebook, :create
alias_method :twitter, :create

twitterこのように、メソッドを作成する必要はありませんfacebook

于 2013-10-10T17:38:27.470 に答える