1

Rails 3.2.6 アプリ用に shopify auth (omniauth-shopify-oauth2 gem) をセットアップしました。

Webページから(次のcontroller#actionに)ルーティングすると正常に動作します

class ShopifyController < ApplicationController
  ...
  def login
    redirect_to "/auth/shopify?shop=#{current_retailer.primary_host_name}"
  end

ショップのログインにリダイレクトされ、ログインすると、成功のコールバックにリダイレクトされます。すべて問題ありません (以下の SERVER LOG SUCCESS を参照)。

しかし、Rails コンソールからほぼ同じことをしようとすると、次のようになります。

irb(main):001:0> RestClient.get 'http://localhost:3000/auth/shopify?shop=vinehillposters.myshopify.com'

私は得る:

RestClient::Unauthorized: 401 Unauthorized: <?xml version="1.0" encoding="UTF-8"?>
<hash>
  <errors>[API] Invalid API key or access token (unrecognized login or wrong password)</errors>
</hash>

以下の SERVER LOG FAIL を参照してください


サーバー ログの成功:

Processing by ShopifyController#login as HTML
... AR stuff snipped ...
Redirected to http://localhost:3000/auth/shopify?shop=vinehillposters.myshopify.com
Completed 302 Found in 93ms (ActiveRecord: 1.6ms)
(shopify) Setup endpoint detected, running now.
(shopify) Request phase initiated.
"https://vinehillposters.myshopify.com/admin/oauth/authorize?response_type=code&client_id=44dd9799fbc268c36ef609f0c2386b8c&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fshopify%2Fcallba
ck&scope=read_orders"

Started GET "/auth/shopify?shop=vinehillposters.myshopify.com" for 127.0.0.1 at 2012-10-30 11:24:21 +0000
(shopify) Setup endpoint detected, running now.
(shopify) Callback phase initiated.

Started GET "/auth/shopify/callback?code=c8c6696ed347e37324d2d62ec203457b&shop=vinehillposters.myshopify.com&timestamp=1351596261&signature=e6324b041d6a6ed1e07719a8909d70f7" for 127.0.0.1 at 
2012-10-30 11:24:21 +0000
Processing by ShopifyController#auth_callback as HTML
...


サーバー ログ エラー:

(shopify) Setup endpoint detected, running now.
(shopify) Request phase initiated.
"https://vinehillposters.myshopify.com/admin/oauth/authorize?response_type=code&client_id=44dd9799fbc268c36ef609f0c2386b8c&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fshopify%2Fcallback&scope=read_orders"


Started GET "/auth/shopify?shop=vinehillposters.myshopify.com" for 127.0.0.1 at 2012-10-30 11:24:54 +0000

お気づきかもしれませんが、request_phase の URL が shopify にリダイレクトされる直前 (後(shopify) Request phase initiated.) に出力されます。どちらの場合も同じです。ただし、ある場合は成功を返し、別の場合は 401 を返します。

それで、私は何を間違っていますか?

4

1 に答える 1

2

あなたの質問は紛らわしく、間違った部分に焦点を合わせていると思います。あなたがする必要があるのは、ユーザーがログインしたら、shopify コールバックからユーザーに関する情報を取得することです。

def shopify
  shopify_domain = params[:shop]
  @your_shop_object = your_finds_or_initializes_shop_or_auth_object_with shopify_domain, token

  if @your_shop_object.persisted?
    redirect_to root_url
  else
    # something went wrong :/
    session['devise.shopify_data'] = request.env['omniauth.auth']
    redirect_to auth_index_url
  end
end

private
def token
  request.env['omniauth.auth']['credentials']['token']
end

これで、永続化されたショップ オブジェクト データを使用して、承認されたセッションをセットアップできます。

session = ShopifyAPI::Session.new(domain, authentication_token)
if session.valid?
  ShopifyAPI::Base.activate_session(session)
  # Now you can make api calls for that shop (domain)
else
  Rails.logger.error "[Shop] Could not create a valid session for '#{domain}'"
end
于 2012-10-30T12:44:24.147 に答える