Javascript 如何在base64中编码我的实例ID

Javascript 如何在base64中编码我的实例ID,javascript,angular,security,serverless,faunadb,Javascript,Angular,Security,Serverless,Faunadb,我需要对faunadb实例的id进行编码,因为我在这种类型的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 = n

我需要对faunadb实例的id进行编码,因为我在这种类型的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”:

再次通过服务使用此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,但我不知道怎么做,我从开发人员开始,我想首先在服务中加密id,然后在服务中解密,但有人说我前面不安全,然后我想在后面使用base64。
谢谢你的建议

此问题的解决方案肯定是而不是将id与base64混淆(这不会保护任何内容),而是需要将用户id与数据库中的敏感信息关联起来

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


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

Hi!我不确定你到底在问什么。忽略代码,或者使用一些psuedo代码,你能澄清你的目标是什么吗?类似于:给定一个fauna ref,我希望能够通过URL模式访问它,该模式看起来像/xyz/:foo/bar,具有这些安全属性。Base64不是加密或访问控制,所以我不确定它在这里扮演什么角色。Huuumm,鉴于我的自定义url类型为“/mission/123456/team”,其中“123456”是一个实例的引用,我想保护我的url,因为访问者只需更改引用号即可轻松访问我的其他任务实例,如“mission/12345678/mission”,然后一个朋友让我在后端使用base64来实现安全性。但我从来没有这样做过,我没有知识或任何想法。那么你也不想要base64了。因为我也可以轻松地使用base64(其他一些id)。您需要一个属性,该属性只能将您发出的URL引导回实例。您不希望URL是可枚举的。您有两种选择:如果您希望在没有身份验证的情况下访问它们,那么您需要加密或签名,或者您可以添加访问控制,然后枚举就无关紧要了。
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)
    })
  })
}