Далее js api и аутентификация - PullRequest
0 голосов
/ 07 мая 2020

Я в процессе создания приложения для полосовых платежей. Это приложение создает форму, которая передает данные в 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)...

Поскольку я не использовать систему входа / выхода, я надеюсь, что этого достаточно. Мысли или отзывы приветствуются.

...