- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在关注this有关如何使用 Node、Nextjs 和 React 构建公共(public) Shopify 应用的教程。
一切都很顺利,但是我现在需要将一些应用程序数据存储在数据库中。为此,我选择了 Firestore。
我正在做的是,当用户通过他们的商店验证应用程序时,我使用 Next JS 服务器中的 Admin-SDK 将他们的商店和 accessToken 写入文档:
Note: I'm using the accessMode "offline" as I need a permanent access token so that my app can make Shopify API requests in the background. I also know that I should really encrypt the accessToken before storing it, however just trying to get the logic working first
server.use(
createShopifyAuth({
apiKey: SHOPIFY_API_KEY,
secret: SHOPIFY_API_SECRET_KEY,
scopes: ['read_products', 'write_products'],
accessMode: "offline",
async afterAuth(ctx) {
const {shop, accessToken} = ctx.session;
ctx.cookies.set('shopOrigin', shop, {
httpOnly: false,
secure: true,
sameSite: 'none'
});
await getSubscriptionUrl(ctx, accessToken, shop);
await db.collection('shops').doc(shop).set({
name: shop,
accessToken
}, {merge: true});
},
}),
);
我还使用 Koa 中间件来验证对我的应用程序的任何请求,以确保它们来自 Shopify 应用程序
server.use(verifyRequest());
我现在想要做的是为我的应用添加一种从 Firebase 提取数据的方法。我在 /pages/api/firebase.js
中创建了一个 api 端点,它使用 shopOrigin
cookie 来获取商店名称,然后提取该商店的数据。
export default async(req, res) => {
const shop = req.cookies.shopOrigin;
const doc = await db.collection('shops').doc(shop).get()
res.status(200).json({success: true, data: doc.data()});
}
我面临的问题是,用户可以简单地更改 cookie 值并为另一家商店提取数据。 verifyRequest
函数似乎不会检查调用它的 shopOrigin 名称是否来自调用它的商店。
有谁知道我如何验证这些请求,以便调用我的 API 的商店只能访问存储数据(通过 Next 服务器上的 admin-sdk)?
最佳答案
考虑到这一点,我可以使用自定义身份验证方法。
在 Next server.js 文件中,下面的代码使用商店名称创建自定义 token ,然后在 cookie 中设置该 token 。例如,它然后在商店集合中创建一个文档,并将文档 ID 作为商店名称。
async afterAuth(ctx) {
const {shop, accessToken} = ctx.session;
await getSubscriptionUrl(ctx, accessToken, shop);
const customToken = await admin.auth().createCustomToken(shop)
ctx.cookies.set('shopOrigin', shop, {
httpOnly: false,
secure: true,
sameSite: 'none'
});
ctx.cookies.set('token', customToken, {
httpOnly: false,
secure: true,
sameSite: 'none'
});
await db.collection('shops').doc(shop).set({
domain: shop,
token: cryptr.encrypt(accessToken),
}, {merge: true});
},
在 React 应用中,初始化您的 Firebase 应用实例,然后在 index.js 中监听 authState 是否更改或使用 token 登录用户。
useEffect(() => {
firebase.auth().onAuthStateChanged(user => {
if(user) {
setSignedIn(true)
} else {
firebase.auth().signInWithCustomToken(Cookies.get('token'));
}
})
},[])
然后在 Firebase 规则中根据需要设置您的权限
match /shops/{shop}/{documents=**} {
allow read, write: if request.auth != null && request.auth.uid == shop
}
关于javascript - 使用 Firebase 进行 Shopify 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472778/
我正在为 Shopify 构建一个应用程序。我的商店以欧元为基础货币,并支持不同的货币,例如美元、新西兰元……(我将其称为活跃货币)。 我可以使用 javascript window.Shopify.
Shopify 的 documentation显示产品句柄中允许的一些字符(URL 中使用的产品标识符)。 Since handles are used for your storefront nav
如何检查当前页面是否是 theme.liquid 中的购物车页面?我试过 page.handle=='cart'但它不起作用。 最佳答案 您不需要 handle过滤器,你可以只使用: {% if te
我正在考虑为 Shopify 开发一个应用程序,它将向商店的结帐页面添加功能。如果用户不必自己将代码复制并粘贴到文件中,那将是理想的,因此我正在考虑使用 ScriptTag API ( http://
我正在为 Shopify 开发一个应用程序。目前处于开发阶段。到目前为止,我已经成功地授权了该应用程序,然后使用嵌入式应用程序 SDK 将其重定向回管理页面。但是,当我返回到管理页面时,它给我一个错误
我想知道 Shopify 中的实体可以拥有的元字段数量有何限制。例如,在产品对象的给定 namespace 下,您可以拥有 1000 个唯一的键值对吗?有硬性限制吗? 请注意,我已经查阅了 Shopi
有没有办法将 Shopify 购物车中的“继续结账”按钮重定向到另一个系统来处理销售?事实上,开发人员/设计师无法参与销售流程的最后一部分,这意味着即使是最轻微的变化也会成为无法克服的问题。有谁知道是
我正在开发一个集成 Shopify 的模块。 所以我想用真实数据测试我的应用程序。 Shopify 是否提供沙盒功能? 最佳答案 如果您创建 partners account您可以设置一个测试商店,让
我想知道 Shopify 中的实体可以拥有的元字段数量有何限制。例如,在产品对象的给定 namespace 下,您可以拥有 1000 个唯一的键值对吗?有硬性限制吗? 请注意,我已经查阅了 Shopi
我正在尝试检索博客上的最新文章。我下面的当前代码不输出任何内容。 {% for article in blogs['myblog'].articles.last %} {{ article.tit
我试图在我的节文件中使用一个变量,但它似乎没有从它的父模板继承。 例如: index.liquid {% assign foo = "bar" %} {% section 'example' %} s
我正在尝试编写一些代码来估计 Shopify 中的发货日期。我一直在学习 liquid,但在用 Ruby 编写一些逻辑时遇到了问题。我不确定 Shopify 模板是使用 Ruby 还是 Ruby on
我正在尝试为我的客户生成一个注销链接,但想为该链接应用一个类。 {{ 'layout.customer.log_out' | t | customer_logout_link }} 上面的liquid
我有 Shopify 商店,客户可以在购买前设计/定制他们的产品。并且根据所选变体的设计/定制价格可能会有所不同。但我认为 Shopify 不便于在添加到购物车时动态更改变体价格。 我可能缺少任何解决
我做了以下事情: 创建合作伙伴帐户 创建了一个开发商店 创建了一个应用。 但我似乎找不到将我的应用程序添加到我的开发商店的方法。有人可以解释一下如何将它添加到我的开发商店而不将其放入应用商店吗? 最佳
当我在 Shopify 中循环访问一个集合时,我想将该产品添加到另一个产品数组中,以便我可以再次循环访问它。 {% assign custom_products = '' %} {% for prod
我需要在 shopify 产品页面上添加自定义文本框字段。 我的要求是在产品页面上添加文本框字段,当客户在购物车中添加产品时,该文本框字段值也会显示在购物车页面和结帐页面上。 我还需要在管理员自定义订
与 Shopify API您可以设置输入字段供用户调整主题,例如: { "type": "number", "id": "products_per_page", "label": "Pro
我想为我的 shopify 应用程序使用 Polaris css 组件。我看过他们的文件 https://polaris.shopify.com/components/get-started#navi
我是 Shopify 的新手,我正在尝试配置现有主题并遵循此处指南 (https://shopify.github.io/themekit/) 的完整流程,但是当我尝试运行命令主题下载时,它显示了错误
我是一名优秀的程序员,十分优秀!