3

我需要编码我的动物区系实例的 id,因为我在 /mission/(id number)/team 这种类型的 URL 中使用它

我用这个创建实例:

/* 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)
    })
  })
}

我用服务中的一个函数调用这个 lambda:

  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)

再次使用此 lambda 服务:

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)
    })
  })
}

实际上这并不安全,因为使用 id 号处理 url 可以访问我的所有任务。我想用base64编码这个id,但我不知道怎么做,我从dev开始,我想首先在服务中加密id并在服务中解密,但有人说我前面不安全,然后我想在后面使用base64。谢谢你的建议 !

4

1 回答 1

4

这个问题的解决方案绝对不是用 base64 混淆 id(这不会保护任何东西),而是需要将用户 id 与数据库中的敏感信息相关联。

然后,您可以让他们根据您的身份验证/数据服务进行身份验证以建立身份。然后该服务将只为他们提供与他们相关联的记录。

此解决方案的棘手部分是为您的 lambda 服务编写身份验证协议。

于 2019-06-14T19:41:05.840 回答