2017-02-04 1 views
0

「Stripe Connect」ボタンをクリックすると、Stripe Connectを実装しようとしましたが、次のエラーが表示されます。OmniauthCallbacksControllerのLoadError#パススルー(devise/stripe接続の場合)

アクション 'パススルー' はOmniauthCallbacksController

ユーザー/ omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def stripe_connect 
     @user = current_user 
     if @user.update_attributes({ 
      provider: request.env["omniauth.auth"].provider, 
      uid: request.env["omniauth.auth"].uid, 
      access_code: request.env["omniauth.auth"].credentials.token, 
      publishable_key: request.env["omniauth.auth"].info.stripe_publishable_key 
     }) 
      # anything else you need to do in response.. 
      sign_in_and_redirect @user, :event => :authentication 
      set_flash_message(:notice, :success, :kind => "Stripe") if is_navigational_format? 
     else 
      session["devise.stripe_connect_data"] = request.env["omniauth.auth"] 
      redirect_to new_user_registration_url 
     end 
     end 
end 

モデル/ user.rb

devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:stripe_connect] 

routes.rbを

devise_for :users, controllers: { registrations: 'users/registrations', :omniauth_callbacks => "users/omniauth_callbacks" } 
見つかりませんでした の

gemfile.rb

gem 'omniauth-stripe-connect' 

初期化子/ stripe.rb

Rails.configuration.stripe = { 
    :publishable_key => ENV['PUBLISHABLE_KEY'], 
    :secret_key  => ENV['SECRET_KEY'] 
} 
Stripe.api_key = Rails.configuration.stripe[:secret_key] 

初期化子/ devise.rb

config.omniauth :stripe_connect, 
    ENV['STRIPE_CONNECT_CLIENT_ID'], 
    ENV['STRIPE_SECRET_KEY'], 
    :scope => 'read_write', 
    :stripe_landing => 'register' 

ボタンリンク:

<%= link_to image_tag('blue-on-light.png'), user_stripe_connect_omniauth_authorize_path(:stripe_connect) %> 

私はそれを理解したよう私のノブでRubyの心、私はdパススルーを定義するには?私はそれをどう定義するのですか?私が入力したとき:

def passthru 
end 

リンクは機能しません/ページがリロードします。ここで解決策を見つけることができませんでした。私は何が欠けていますか?

EDIT:

がに私の接続ストライプへのリンクを変更:ボタンを「ストライプに接続する」

<%= link_to image_tag('blue-on-light.png'), "https://stackoverflow.com/users/auth/stripe_connect" %> 

リンクはストライプページに接続、私がクリックしたときに私を取り、ページ見つけられず、読み込まれたりリダイレクトされたりしません。

答えて

1

は、あなたのユーザモデル

# Checks if user exists, otherwise create it 
def self.find_for_stripe_connect(access_token, _ = nil) 
    data = access_token.info 
    user = User.where(email: data['email']).first_or_create(
    email: data['email'], 
    password: Devise.friendly_token[0, 20], 
    provider: request.env["omniauth.auth"].provider, 
    uid: request.env["omniauth.auth"].uid, 
    access_code: request.env["omniauth.auth"].credentials.token, 
    publishable_key: request.env["omniauth.auth"].info.stripe_publishable_key 
) 
    user 
end 

class OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def stripe_connect 
     @user = User.find_for_stripe_connect(request.env['omniauth.auth'], current_user) 
     set_notice_and_redirect 
    end 

    private 

    def set_notice_and_redirect   
     if @user.persisted? 
      flash[:notice] = 'Successfully signed in' 
      set_flash_message(:notice, :success, :kind => "Stripe") if is_navigational_format? 
     else 
      session["devise.stripe_connect_data"] = request.env["omniauth.auth"] 
      redirect_to new_user_registration_url 
     end 
    end 
end 

にとして

# app/controllers/omniauth_callbacks_controller.rb 
class OmniauthCallbacksController < ApplicationController 
    def stripe_connect 
    .... 

を変更してもパスで歌う試すことができます

<%= link_to image_tag('blue-on-light.png'), user_stripe_connect_omniauth_authorize %> 

パススルーアクションを定義する必要はないと思います。下の2つがルートに表示されていれば、動作します。パスを許可ストライピングするようにユーザーをリダイレクトするためのもので、あなたが投稿してちょうどいくつかの同様の変更をしていたコールバックが戻ってあなたのサイトにストライプから

$ rake routes 

user_stripe_connect_omniauth_authorize /auth/stripe_connect(.:format) .... 
user_stripe_connect_omniauth_callback /auth/stripe_connect/callback(.:format) .... 
+0

をユーザーをリダイレクトするためです。私は私のルートとuser/OmniauthCallbacksController.rbを変更しましたが、今はただエラーが出ます:見つかりません。認証パススルー。 – ChrisJC2017

+0

また、プロバイダomniauth_providersのユーザモデルhttp://stackoverflow.com/a/22246487/522897でomniauthプロバイダを設定する必要があります。[:stripe_connect] –

+0

これを試して質問の詳細に追加してください。同じエラーが続く。 – ChrisJC2017

関連する問題