我正在使用oauth尝试通过这指南通过venmo登录。这不是官方的,venmo文档甚至没有用ruby显示代码示例。
一开始,我甚至看不到venmo的登录。我删除了初始化器中id和密钥周围的ENV和括号,然后我可以看到登录。当我提交并返回调用时,我得到了一个错误:(我认为它会不断地重试.我必须手动关闭服务器)
{"error": {"message": "Missing argument: client_id.", "code": 241}}
I, [2014-04-16T11:49:48.124423 #47700] INFO -- omniauth: (venmo) Callback phase initiated.
E, [2014-04-16T11:49:48.345202 #47700] ERROR -- omniauth: (venmo) Authentication failure! invalid_credentials: OAuth2::Error, {"message"=>"Missing argument: client_id.", "code"=>241}: 这是我的路线:
get 'users/auth/venmo/callback' => 'omniauth_callbacks_controller#create'宝石:
gem 'devise'
gem 'omniauth'
gem 'omniauth-venmo'我把这个放在我的初始值/Omauth.rb中
Rails.application.config.middleware.use OmniAuth::Builder do
provider :venmo, 'id', 'secret', :scope => 'access_feed,access_profile,access_friends,make_payments'
end这是我的回调控制器
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def venmo
@user = User.find_for_oauth(env["omniauth.auth"], current_user)
raise
if @user.persisted?
sign_in_and_redirect root_path, :event => :authentication
set_flash_message(:notice, :success, :kind => "Venmo") if is_navigational_format?
else
session["devise.venmo_uid"] = env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
protected
def auth_hash
request.env['omniauth.auth']
end 结束
我有初始化器/devise.rb
require 'omniauth-venmo'
config.omniauth :venmo, "KEY", "SECRET"-当然是填好了值。我很感谢你的帮助..。谢谢你!!
更新:我已经把这个推到了一个github存储库中,我的一个同行也把它删除了。他没有犯同样的错误。这是什么原因..?

发布于 2014-04-17 16:59:16
@Peege151 151..。我创建了一个带有的工作解决方案,正如you..here所说的,下面是我的代码,使用它作为参考。我不认为这是提出的问题的确切解决办法,但这可能会有帮助,因为我使它发挥作用
宝石:
gem 'rails 3.2.14' # Important~
gem 'devise'
gem 'omniauth'
gem 'omniauth-venmo'我还没有在初始化器中创建omniauth.rb ..。相反,我在devise.rb中添加了配置,就像您希望的那样
我的devise.rb:
require "omniauth-venmo"
config.omniauth :venmo, '--Your APP KEY -- ', '-- App Secret--',{:client_options => {:ssl => {:verify => false}}}上面我已经将SSL验证设置为false,如果您希望启用SSL with (:=> true)。
这是我的回调控制器代码:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def venmo
@user = User.find_for_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Venmo") if is_navigational_format?
else
session["devise.twitter_uid"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
endUser.rb代码:
class User < ActiveRecord::Base
TEMP_EMAIL = 'change@me.com'
TEMP_EMAIL_REGEX = /change@me.com/
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :provider , :uid
devise :omniauthable
def self.find_for_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
if user
return user
else
registered_user = User.where(:email => auth.info.email).first
if registered_user
return registered_user
else
user = User.create(name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email.blank? ? TEMP_EMAIL : auth.info.email,
password:Devise.friendly_token[0,20],
)
end
end
user
end
end以下是我的设计和回调routes.rb:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
get '/auth/venmo/callback' => 'users/omniauth_callbacks#venmo'登录页面链接:
<%= link_to "Sign in with Venmo", user_omniauth_authorize_path(:venmo) %> 截图:

发布于 2014-04-17 16:08:52
我不确定这里的确切问题,但有一点需要注意的是,它看起来是在点击一个裸露的URL,而不是api.venmo.com/v1/,这是我们的最新版本。先试试,然后我们就可以从那里开始工作了。
https://stackoverflow.com/questions/23114499
复制相似问题