我正在设计一款shopify应用程序,让客户能够通过手机购买产品。这种情况下,客户需要能够注册omniauth,然后他们可以从应用程序中获取产品信息。但是,在任何客户可以从商店获得产品信息之前,我的shopify应用程序应该首先使用omniauth向店主进行身份验证。
现在的问题是Desive将修改omniauth默认的身份验证策略。如果我使用shopify_api,我通过路径auth/shopify进行身份验证,它可以在没有安装Desive的情况下工作。如果安装了Desive,它会将auth/shopify重定向到omniauth/shopify。我发现这条路径是由Desive生成的。如何跳过设计并使用原始omniauth路径?谢谢
Devsie有一个很好的教程,教你如何从你的设计模型中分离出omniAuthable
。这将允许您配置自己的全方位设置。
一旦您在配置/初始化器/omniauth.rb中为两个提供程序设置了提供程序,并从conifg/初始化器/devise.rb中删除了devise.omniauth
,您将需要设置您的路由以不同方式处理来自OAuth的响应。
路线。铷
devise_scope :user do
get "/auth/:action/callback", to: 'users/omniauth_callbacks', constraints: { action: /facebook/ }
end
get 'auth/:action/callback' => 'another_controller', constraints: { action: /shopify/ } # connections
然后在另一个控制器中。铷
class AnotherController
def shopify
auth_hash = request.env['omniauth.auth']
shop = auth_hash[:uid]
token = auth_hash[:credentials][:token]
ShopifyAPI::Session.temp("#{shop}.myshopify.com", token) do
current_shop = ShopifyAPI::Shop.current
...
end
end
end
希望这有帮助。