目前,我正在与使用3脚OAuth安全性的API进行通信.
对于通信,我每次都需要访问令牌.访问令牌自创建日期起有效期为1年.
我已将其存储在数据库(AccessToken类的序列化对象)中.
但在进行API调用时,我遇到了以下错误.这是我的基本流程
1)获取access_token
consumer = OAuth::Consumer.new API_KEY,
API_SECRET,
{
site: 'https://example.com',
header: { Accept: 'application/nd.v3+json' },
http_method: :get,
request_token_url: @request_token_uri,
access_token_url: @access_token_uri,
authorize_url: @authorizerequest_token_uri
}
puts '***** Fetching request token *****'
request_token = consumer.get_request_token({}, 'oob')
puts "Request Token received - #{request_token.token}"
puts
puts 'Goto to url mentioned below to authorize. Paste the access token verifier'
puts request_token.authorize_url
verifier = gets.chomp
puts
puts
puts '***** Fetching access token *****'
access_token = request_token.get_access_token(oauth_verifier: verifier)
Run Code Online (Sandbox Code Playgroud)
2)将access_token存储在数据库中
access_token_user.rb
class AccessTokenUser < ActiveRecord::Base …Run Code Online (Sandbox Code Playgroud) 目前我正在开发rails 4项目,现在我必须链接/连接另一个应用程序(不是用于访问API的sso),例如example.com.(注意: example.com使用3脚oauth安全架构)
搜索后发现我必须实施omniouth策略.
为此,我已经审阅了这个链接.根据策略 - 贡献指南, 我能够完成设置和请求阶段,您可以在这里找到我的示例代码.
require 'multi_json'
require 'omniauth/strategies/oauth2'
require 'uri'
module OmniAuth
module Strategies
class MyAppStrategy < OmniAuth::Strategies::OAuth2
option :name, 'my_app_strategy'
option :client_options, {
site: site_url,
authorize_url: authorize_url,
request_url: request_url,
token_url: token_url,
token_method: :post,
header: { Accept: accept_header }
}
option :headers, { Accept: accept_header }
option :provider_ignores_state, true
def consumer
binding.pry
::OAuth::Consumer.new(options.client_id, options.client_secret, options.client_options)
end
def request_phase # rubocop:disable MethodLength
binding.pry
request_token = consumer.get_request_token({:oauth_callback => callback_url}, options.request_params)
session["oauth"] …Run Code Online (Sandbox Code Playgroud) 嗨我在heroku上托管的rails上有一个ruby,它使用mysql作为数据库.
现在我必须将数据库备份到本地计算机.但我在备份时遇到问题.
为此,我安装了tapsgem,我正在使用以下命令
heroku pg:pull mysql2://username@hostname.cleardb.com/heroku_database local_database --app my_app
Run Code Online (Sandbox Code Playgroud)
但它给出了错误 !Your app has no databases.
任何人都可以指导我如何将mysql数据库从heroku拉到本地机器.
编辑
我使用了以下命令语法
heroku pg:pull <REMOTE_SOURCE_DATABASE> <LOCAL_TARGET_DATABASE>
Run Code Online (Sandbox Code Playgroud)
并获取REMOTE_SOURCE_DATABASE我使用了以下命令
heroku config:get DATABASE_URL --app my_app
Run Code Online (Sandbox Code Playgroud)
嗨我已经使用设计进行身份验证,并且在其中进行了一些更改,例如我已使用电子邮件和手机号码提供登录.参考此链接.
这是我的代码
def self.find_for_database_authentication(conditions={})
find_by(mobile_number: conditions[:email]) || find_by(email: conditions[:email])
end
Run Code Online (Sandbox Code Playgroud)
我使用可确认模块发送确认说明,他们的电子邮件工作正常.
现在,如果用户没有输入此电子邮件(只输入手机号码),那么他必须发送短信(短信中的确认指令).
所以我有疑虑
How can I achieve this functionality?How can I generate the same confirmation link for the same.编辑(我试过以下解决方案来生成确认链接)
因为我也必须在SMS中发送确认链接,所以我尝试使用以下方法生成给定的链接
http://localhost:3000/admin_users/confirmation?confirmation_token=#{@user.confirmation_token}"
Run Code Online (Sandbox Code Playgroud)
它会生成以下类型的链接
http://localhost:3000/admin_users/confirmation?confirmation_token=00b2880c9662c65dc6d276db08532ea42d4333e6b7d2357d036cb9233eed41e8
Run Code Online (Sandbox Code Playgroud)
当我累了使用这个链接时,它给我确认令牌无效错误.搜索后我发现了这个.那么如何在设计范围外生成确认链接.
目前,我们正面临处理HEAD和GET请求的问题.让我解释详细的情况
我们在我们的应用程序中集成了入站和出站SMS设施.
但是从过去的2-3个月开始,我们收到来自SMS服务提供商的2-3次GET请求,这对我们的系统产生了影响.
经过与SMS服务提供商的长时间讨论,他们说"从头到尾"处理"头部和获取请求"
那么任何人都可以建议如何解决这个问题.
编辑 经过研究,我们发现我们正在获取HEAD和GET请求中的所有参数,因为该服务器正在处理它.
我有下表 4 个模型
class ItemCode < ActiveRecord::Base
belongs_to :item_point
end
class ItemPoint < ActiveRecord::Base
belongs_to :item
has_many :item_codes
end
class Item < ActiveRecord::Base
belongs_to :prodcut_category
has_many :item_points
end
class ProductCategory < ActiveRecord::Base
has_many :items
end
Run Code Online (Sandbox Code Playgroud)
现在我必须使用product_category找到item_codes详细信息,为此我使用了内部联接。这是mysql查询
SELECT *
FROM `item_codes` utc
INNER JOIN item_points rtp ON rtp.id = utc.item_point_id
INNER JOIN items ri ON ri.id = rtp.item_id
INNER JOIN product_catagories rpc ON rpc.id = ri.product_catagory_id
WHERE rpc.id =1
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
现在我必须以 Acitve …