Я в процессе создания приложения для полосовых платежей. Это приложение создает форму, которая передает данные в Stripe api через следующий js api. Мне просто нужно встроить базовую c аутентификацию, чтобы только те, кто отправляет свои платежи через мою форму, имели доступ к API. Как мне go добавить базовую c аутентификацию к моему API без необходимости входа пользователей в систему? Мог бы я сделать это через переменную env? Я новичок в мире nextjs / vercel и пришел из области python / django / react, так что, возможно, мои мысли по этому поводу обратные ... Я планирую разместить api на vercel и форму реакции на php сайт. Таким образом, форма реакции будет по существу передавать данные sh в api приложения vercel. (Причина, по которой я не создаю api в php, заключается в том, что я не знаю php, и потому что я пытаюсь создать что-то с минимальным размером на текущем php сайте, насколько это возможно.) Любая помощь или руководство по этому поводу было бы очень признательно!
Мои страницы / api / customers. js файл
import Stripe from 'stripe'
const stripe = new Stripe(process.env.SECRET_KEY)
export default async (req, res) => {
if (req.method === 'POST') {
try {
const { email, name, address, phone, source } = req.body
// Check for customer
const customerExist = await stripe.customers.list(
{
email: email,
limit: 0
})
// console.log('customerExist', customerExist.data[0])
if (customerExist.data.length < 1) {
const customer = await stripe.customers.create({
email,
name,
address,
phone,
source
})
res.status(200).send(customer.id)
} else {
res.status(200).send(customerExist.data[0].id)
}
} catch (err) {
res.status(500).json({ statusCode: 500, message: err.message })
}
} else {
res.setHeader('Allow', 'POST')
res.status(405).end('Method Not Allowed')
}
}
Часть моей формы оформления заказа
// Function to check/create a user account via api
const checkUserAccount = async (billingDetails, source) => {
try {
const customer = await axios.post('/api/customers', {
email: billingDetails.email,
name: billingDetails.name,
phone: billingDetails.phone,
address: billingDetails.address,
source: source
})
return customer.data
} catch (err) {
console.log(err)
}
}
ОБНОВЛЕНИЕ:
Хорошо, поэтому я добавил «TOKEN» в свой .env
файл и теперь требую, чтобы мой api получил этот конкретный c токен.
Я добавил это в свою форму оформления заказа:
...
axios.defaults.headers.common.Authorization = process.env.AUTH_TOKEN
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
...
, а затем добавил это в api:
if (req.method === 'POST' && req.headers.authorization === process.env.AUTH_TOKEN)...
Поскольку я не использовать систему входа / выхода, я надеюсь, что этого достаточно. Мысли или отзывы приветствуются.