Как я могу кодировать в base64 мой экземпляр ID - PullRequest
3 голосов
/ 14 июня 2019

Мне нужно закодировать идентификатор моего экземпляра faunadb, потому что я использую его в URL-адресе этого типа / mission / (id number) / team

Я создаю экземпляр с этим:

/* code from functions/todos-create.js */
import faunadb from 'faunadb' /* Import faunaDB sdk */
/* configure faunaDB Client with our secret */
const q = faunadb.query
const client = new faunadb.Client({
  secret: process.env.FAUNADB_SECRET
})

/* export our lambda function as named "handler" export */
exports.handler = (event, context, callback) => {
  /* parse the string body into a useable JS object */


  const eventBody = JSON.stringify(event.body)
  const data = JSON.parse(eventBody)
  const mission = {
    data: JSON.parse(data)
  }
  // {"title":"What I had for breakfast ..","completed":true}
  /* construct the fauna query */
  return client.query(q.Create(q.Ref("classes/missions"), mission))
  .then((response) => {
    console.log("success", response)
    /* Success! return the response with statusCode 200 */
    return callback(null, {
      statusCode: 200,
      body: JSON.stringify(response)
    })
  }).catch((error) => {
    console.log("error", error)
    /* Error! return the error with statusCode 400 */
    return callback(null, {
      statusCode: 400,
      body: JSON.stringify(error)
    })
  })
}

Я называю эту лямбду с функцией в сервисе:

  createMission(data) {
    return fetch('/.netlify/functions/mission-create', {
      body: JSON.stringify(data),
      method: 'POST'
    }).then(response => {
      return response.json();
    });
  }

, а затем загружаю ее в начале моей страницы по адресу '/ mission / (id number) / team':

this._missionService.readById(this.route.snapshot.params.missionId)

снова с этой лямбдой службой:

import faunadb from 'faunadb'

const q = faunadb.query
const client = new faunadb.Client({
  secret: process.env.FAUNADB_SECRET
})

exports.handler = (event, context, callback) => {
  const id = event.path.match(/([^\/]*)\/*$/)[0];
  console.log(`Function 'mission-read' invoked. Read id: ${id}`)
  return client.query(q.Get(q.Ref(q.Class("missions"), id)))
  .then((response) => {
    console.log("success", response)
    return callback(null, {
      statusCode: 200,
      body: JSON.stringify(response)
    })
  }).catch((error) => {
    console.log("error", error)
    return callback(null, {
      statusCode: 400,
      body: JSON.stringify(error)
    })
  })
}

На самом деле это небезопасно, потому что обработка URL с идентификатором номера позволяет получить доступ ко всем моим миссиям.Я хочу закодировать в base64 этот идентификатор, но я не знаю, как это сделать, я начинаю с dev, и я подумал, что сначала зашифровать id в сервисе и расшифровать его в сервисе, но кто-то сказал, что фронт не защищен, затем я хочуиспользовать base64 в спину.Спасибо за совет!

1 Ответ

4 голосов
/ 14 июня 2019

Решением этой проблемы является определенно , а не , чтобы скрыть идентификатор с base64 (, который ничего не защитит ), но вместо этого вам нужно связать идентификатор пользователя с вашей конфиденциальной информацией в база данных.

Затем вы можете сделать так, чтобы они аутентифицировались в вашей службе аутентификации / данных для установления личности. Тогда служба будет обслуживать только те записи, которые с ними связаны.

Сложная часть этого решения - написание протокола аутентификации для ваших лямбда-сервисов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...