我应该将 Cognito 删除用户逻辑放在前端还是后端?

CCC*_*CCC 2 amazon-web-services amazon-dynamodb aws-lambda

对于我网站中的认知用户创建,逻辑如下。

注册.jsx

import { Auth } from "aws-amplify";
...
            // create user in Cognito User Pool in frontend
            const signUpResponse = await Auth.signUp({
                username,
                password,
                attributes: {
                    email: email
                }
            })
            // using lambda function and api gateway for this request
            // in order to create user in my "User" table in Dynamodb
            const createAdminResponse = await APIHandler.createAdmin(payload)
...

Run Code Online (Sandbox Code Playgroud)

用户表
-id(字符串):分区键

对于删除用户,我在想最好的方法是什么。
这是我当前用于删除数据库中用户的 lambda 函数

'use strict'
const AWS = require('aws-sdk');

exports.handler = async function (event, context, callback) {
    const documentClient = new AWS.DynamoDB.DocumentClient();

    let responseBody = "";
    let statusCode = 0;

    const { id } = event.pathParameters;

    const params = {
        TableName : "User",
        Key: {
            id: id,
        }
    };

    try{
        const data = await documentClient.delete(params).promise();
        responseBody = JSON.stringify(data);
        statusCode = 204
    }catch(err){
        responseBody = `Unabel to delete admin: ${err}`;
        statusCode = 403
    }

    const response = {
        statusCode: statusCode,
        headers:{
            "Content-Type": "application/json",
            "access-control-allow-origin": "*"
        },
        body: responseBody
    }

    return response
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑是删除前端认知用户池中的用户还是包含在上面的 lambda 函数中,或者创建一个单独的 lambda 函数。

这是从文档中复制的。

const AWS = require('aws-sdk');
AWS.config.update({
  accessKeyId: 'access key id',
  secretAccessKey: 'secret access key',
  region: 'region',
});
const cognito = new AWS.CognitoIdentityServiceProvider();

await cognito.adminDeleteUser({
  UserPoolId: 'pool id',
  Username: 'username',
}).promise();
Run Code Online (Sandbox Code Playgroud)

如果我在 lambda 函数中使用它,我还需要在代码中包含我的 aws 配置,这不是不好的做法吗?

但我不确定应该在哪里使用该代码,有人可以给一些建议吗?

Ngh*_* Do 5

设计实际上取决于你,它取决于多种因素,但我在这里起草了一些选项

  1. 如果你只有 1 个前端客户端并且你想快速包装你的功能,那么你可以将逻辑直接放到前端

  2. 如果您有多个前端,例如 Web、应用程序等,那么您最好将后端的逻辑作为 api,以便可以在各个应用程序中重复使用

  3. 如果您打算扩展逻辑,那么最好将逻辑放在后端