- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已将嵌入式 Shopify 应用程序部署到生产服务器。在此项目中,shopify_app
gem 用于处理流行的场景,例如使用 omniauth-shopify-oauth2
gem 进行身份验证。
尽管该应用程序安装在商店中,但该应用程序未正确进行身份验证,因此不会存储 session 。似乎在将应用程序的控制权交给 omniauth-oauth2
gem 之后,它会将应用程序重定向到预期的根路径,但因为 session 未保存并且 Controller 具有 arround_filter : shopify_session
,在 /auth/shopify?shop=foobar.myshopify.com
和 /login?shop=foobar.myshopify.com
之间创建了一个无限循环。最后,shopify管理面板,抛出一个shopify the application cannot be loaded, please check that your browser allows third party cookies
错误,我们无法打开应用程序。
当应用服务器在本地主机上但在生产服务器上不起作用时,此应用程序运行良好
以下是我认为可能有用的部分代码:
服务器日志:
Started GET "/?hmac=HMAC&shop=SHOP&signature=SIGNATURE×tamp=TIMESTAMP" for 127.0.0.1 at 2015-04-07 20:33:11 +0000
Processing by MainController#index as HTML
Parameters: {"hmac"=>"HMAC", "shop"=>"SHOP", "signature"=>"SIGNATURE", "timestamp"=>"TIMESTAMP"}
shop_session:
Redirected to http://PRODUCTION_SERVER_IP/login?shop=SHOP
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)
Started GET "/login?shop=SHOP" for 127.0.0.1 at 2015-04-07 20:33:11 +0000
Processing by SessionsController#new as HTML
Parameters: {"shop"=>"SHOP"}
Rendered common/iframe_redirect.html.erb (0.0ms)
Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)
Started GET "/auth/shopify?shop=SHOP" for 127.0.0.1 at 2015-04-07 20:33:12 +0000
Started GET "/?code=CODE&hmac=HMAC&shop=SHOP&signature=SIGNATURE×tamp=1428438796" for 127.0.0.1 at 2015-04-07 20:33:12 +0000
Processing by MainController#index as HTML
Parameters: {"code"=>"CODE", "hmac"=>"HMAC", "shop"=>"SHOP", "signature"=>"SIGNATURE", "timestamp"=>"1428438796"}
Redirected to http://PRODUCTION_SERVER_IP/login?shop=Shop
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)
Started GET "/login?shop=SHOP" for 127.0.0.1 at 2015-04-07 20:33:13 +0000
Processing by SessionsController#new as HTML
Parameters: {"shop"=>"SHOP"}
Rendered common/iframe_redirect.html.erb (0.0ms)
Completed 200 OK in 1ms (Views: 0.4ms | ActiveRecord: 0.0ms)
Started GET "/auth/shopify?shop=SHOP" for 127.0.0.1 at 2015-04-07 20:33:13 +0000
Started GET "/?
// And this pattern goes on...
nginx 配置:
upstream app_name {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 80;
server_name PRODUCTION_SERVER_IP;
access_log /var/www/app_name/log/access.log;
error_log /var/www/app_name/log/error.log;
root /var/www/app_name/current;
index index.html;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
}
location @ruby {
proxy_pass http://app_name;
proxy_set_header Host $host;
}
}
config/initializers/omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :shopify,
ShopifyApp.configuration.api_key,
ShopifyApp.configuration.secret,
# Example permission scopes - see http://docs.shopify.com/api/tutorials/oauth for full listing
scope: 'read_products,read_themes, write_themes, read_customers',
myshopify_domain: ShopifyApp.configuration.myshopify_domain.presence || "myshopify.com",
callback_url: 'http://PRODUCTION_SERVER_IP',
setup: lambda {|env|
params = Rack::Utils.parse_query(env['QUERY_STRING'])
site_url = "https://#{params['shop']}"
env['omniauth.strategy'].options[:client_options][:site] = site_url
}
end
config/initializers/shopify_session_repository.rb:ShopifySessionRepository.storage = "商店"
app/controllers/sessions_controller.rb:
class SessionsController < ApplicationController
layout :false
def new
authenticate if params[:shop]
end
def show
if response = request.env['omniauth.auth']
sess = ShopifyAPI::Session.new(params[:shop],response['credentials']['token'])
session[:shopify] = ShopifySessionRepository.store(sess)
flash[:notice] = "Logged in"
redirect_to return_address
else
flash[:error] = "Could not log in to Shopify store."
redirect_to :action => 'new'
end
end
protected
def authenticate
#
# Instead of doing a backend redirect we need to do a javascript redirect
# here. Open the app/views/commom/iframe_redirect.html.erb file to understand why.
#
if shop_name = sanitize_shop_param(params)
@redirect_url = "/auth/shopify?shop=#{shop_name}"
render "/common/iframe_redirect", :format => [:html], layout: false
else
redirect_to return_address
end
end
def return_address
session[:return_to] || root_url
end
def sanitize_shop_param(params)
return unless params[:shop].present?
return unless domain = ShopifyApp.configuration.myshopify_domain.presence || "myshopify.com"
name = params[:shop].to_s.strip
name += ".#{domain}" if !name.include?(domain) && !name.include?(".")
name.sub!(%r|https?://|, '')
u = URI("http://#{name}")
u.host.ends_with?(".#{domain}") ? u.host : nil
end
end
知道为什么它在授权后不存储 session 吗?
最佳答案
如果回调 url 与您用于注册的 url 相同,则可能会发生这种情况。尝试调查请求参数,或提供另一个回调 url 以返回。您可能会看到第一个请求与后续请求不同。
关于ruby-on-rails - shopify 应用程序授权陷入无限重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500994/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!