[英]Firestore Security rules with payment form
我正在創建一個抽獎網站。 用戶連接他的錢包並支付抽獎券。 區塊鏈交易確認后,我將他的抽獎券添加到 firestore 的收藏中。
這會導致安全問題,因為如果我允許用戶在我的 firebase 安全規則中寫入抽獎券集合,他可以創建自己的彩票而無需付費。
僅當付款成功后,我才需要將門票添加到數據庫中。
我不知道有支付方式的網站是如何做到的。 也許firebase不是一個好的解決方案?
我的項目在反應/打字稿中。
你說你通過區塊鏈進行支付,我假設你使用solidity作為你的智能合約語言?
你如何在solidity中發出事件? (抽獎.sol)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Raffle {
event PaymentCompletion(address buyer, uint256 amountOfTickets);
function buyTickets() external payable {
emit PaymentCompletion(msg.sender, msg.value)
}
}
你如何聆聽這些事件? 使用 web3js 時:
const contract = new web3.eth.Contract(CONTRACT_ABI, CONTRACT_ADDRESS);
const lastBlock = await web3.eth.getBlockNumber()
// paymentEvents is an array containing the payments of the last 500 blocks.
const paymentEvents = await contract.getPastEvents(
'PaymentCompletion', // change if your looking for a different event
{ fromBlock: latestBlock - 500, toBlock: 'latest' }
);
現在遍歷這些事件並將它們放入您的數據庫中。 您還可以設置訂閱,在創建新塊時通知您,這樣您就可以檢查新事件是否在當前塊內。
如果您將第一個區塊鏈事件添加到 firebase realtime database
,這就是它的樣子。
var db = admin.database();
var ref = db.ref("/payments");
// ...
ref.child("path/to/transaction").set({
buyer: paymentEvents[0].buyer,
amountOfTickets: paymentEvents[0].amountOfTickets,
// put the rest of your data here
}, (err) => {
if (err) {
console.error(err)
}
})
或者(如果你不想在區塊鏈上處理付款)你也可以看看stripe ,它還有一個易於集成的 firebase 插件。 (但我從未嘗試過)。 但是,imo 使用區塊鏈處理付款將是最干凈的解決方案。 (+您沒有條紋使用的手續費)。
我希望我能給你一些好的線索! Firebase 應該絕對適合這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.