2017-02-04 22 views
0

Попытка реализовать Stripe Connect, и я получаю следующую ошибку, когда я нажимаю кнопку «подключиться к полосе».LoadError в OmniauthCallbacksController # passthru (с подключением devise/stripe)

Действие 'PassThru' не может быть найдено для 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) %> 

Как я понимаю с моим noob Ruby mind, я урожденный d определить «passthru»? как мне его определить? когда я ввожу:

def passthru 
end 

ссылка не работает/страница перезагружается сама. Не удалось найти решение здесь. Что мне не хватает?

EDIT:

изменил мою Подключитесь к Stripe ссылку:

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

Ссылку берет меня к соединиться с полоской страницы, но при нажатии на кнопку «подключиться к нашивку», страница не может быть найден и не загружается и не перенаправляется.

ответ

1

Можете ли вы попробуйте изменить

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

в

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 

и в модели пользователя

# 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 

, а также петь в пути

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

Думаю, вам не нужно определять действие passthru. Если вы увидите, как показано ниже на маршрутах, он может работать. Авторизоваться путь для перенаправления пользователя на полоску и обратный вызов для перенаправления пользователя с полоски на ваш сайт

$ rake routes 

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

только что сделал некоторые подобные изменения, как вы писали. Я изменил свой маршрут и пользователь/OmniauthCallbacksController.rb, но теперь я просто получаю сообщение об ошибке: Не найден. Аутентификация passthru. – ChrisJC2017

+0

вам также может потребоваться установить поставщика omniauth в пользовательской модели http://stackoverflow.com/a/22246487/522897, для вашего провайдера omniauth_providers: [: stripe_connect] –

+0

Пробовал это и добавил выше в деталях вопроса. такая же ошибка сохраняется. – ChrisJC2017

 Смежные вопросы

  • Нет связанных вопросов^_^