Lambda 函数不会在 Cognito 事件后触发
Lambda functions do not trigger after cognito events
我正在尝试使用 AWS Cognito 实施身份验证工作流程,以便将我的用户 table(Hasura graphql 后端)与 Cognito 用户同步,但 post 确认 Lambda 不会触发。 Lambda函数的代码如下:
const axios = require('axios');
exports.handler = async (event,context,callback) => {
console.log(event);
const id=event.request.userAttributes.sub;
const name=event.request.userAttributes.username;
const email=event.request.userAttributes.email;
const hasuraAdminSecret="####"
const graphAPI="####"
const body = {
query: `
mutation insertUsers($userId: String!, $userName: String!, $userEmail: String!) {
insert_users(objects: {cognito_id: $userId, email: $userEmail, username: $userName}) {
affected_rows
}
}
`,
variables: {
userId:id,
userEmail:name,
userName:email
}
}
var response = {};
await axios.post(graphAPI, body, {
headers: {'content-type' : 'application/json', 'x-hasura-admin-secret': hasuraAdminSecret}
})
.catch(err => {
console.error(err.data);
response=err.data;
})
.then(res => {
console.log(res.data);
response = res.data;
})
callback(null,event);
}
注册和确认页面的代码如下:
import { Auth } from 'aws-amplify';
export default {
name:'Signin',
data(){
return {
username: undefined,
email: undefined,
password: undefined,
code: undefined,
user: undefined,
}
},
methods: {
confirm() {
// After retrieveing the confirmation code from the user
Auth.confirmSignUp(this.username, this.code, {
// Optional. Force user confirmation irrespective of existing alias. By default set to True.
forceAliasCreation: false
}).then(this.$router.push("/"))
.catch(err => console.log(err));
},
signup(){
Auth.signUp({
username:this.username,
password: this.password,
attributes: {
email: this.email,
name:this.username
},
validationData: [], // optional
})
.then(data => this.user = data.user)
.catch(err => console.log(err));
}
}
}
注册时,在 AWS 控制台中创建并确认了用户,但未触发 lambda 函数(Cloudwatch 中无日志,Cognito 中无错误)。我应该去哪里看?
一旦新用户 signup
到 aws-cognito
您可以使用 trigger
调用 lambda functions
第 1 步: 打开 aws-cognito
User Pools
在 general setting
下点击 trigger
第 2 步: 您可以自定义 workflow
和 triggers
。您可以调用 lambda
函数
- 预注册
- 预认证
- 自定义消息
- Post 认证
- Post确认
- 定义身份验证质询
- 创建身份验证挑战
- 验证授权挑战
- 用户迁移
- 令牌生成前
第 3 步: Select 您的工作流程触发器 Post confirmation
您可以看到 lambda
函数。您必须 select lambda
函数。
添加 Cloudwatch:
第 1 步: 您已在 Permissions
选项卡下的 Configuration
下添加角色
第 2 步: 编辑 role
并为 CloudWatch
附加 policy
和 CloudWatch Logs
我正在尝试使用 AWS Cognito 实施身份验证工作流程,以便将我的用户 table(Hasura graphql 后端)与 Cognito 用户同步,但 post 确认 Lambda 不会触发。 Lambda函数的代码如下:
const axios = require('axios');
exports.handler = async (event,context,callback) => {
console.log(event);
const id=event.request.userAttributes.sub;
const name=event.request.userAttributes.username;
const email=event.request.userAttributes.email;
const hasuraAdminSecret="####"
const graphAPI="####"
const body = {
query: `
mutation insertUsers($userId: String!, $userName: String!, $userEmail: String!) {
insert_users(objects: {cognito_id: $userId, email: $userEmail, username: $userName}) {
affected_rows
}
}
`,
variables: {
userId:id,
userEmail:name,
userName:email
}
}
var response = {};
await axios.post(graphAPI, body, {
headers: {'content-type' : 'application/json', 'x-hasura-admin-secret': hasuraAdminSecret}
})
.catch(err => {
console.error(err.data);
response=err.data;
})
.then(res => {
console.log(res.data);
response = res.data;
})
callback(null,event);
}
注册和确认页面的代码如下:
import { Auth } from 'aws-amplify';
export default {
name:'Signin',
data(){
return {
username: undefined,
email: undefined,
password: undefined,
code: undefined,
user: undefined,
}
},
methods: {
confirm() {
// After retrieveing the confirmation code from the user
Auth.confirmSignUp(this.username, this.code, {
// Optional. Force user confirmation irrespective of existing alias. By default set to True.
forceAliasCreation: false
}).then(this.$router.push("/"))
.catch(err => console.log(err));
},
signup(){
Auth.signUp({
username:this.username,
password: this.password,
attributes: {
email: this.email,
name:this.username
},
validationData: [], // optional
})
.then(data => this.user = data.user)
.catch(err => console.log(err));
}
}
}
注册时,在 AWS 控制台中创建并确认了用户,但未触发 lambda 函数(Cloudwatch 中无日志,Cognito 中无错误)。我应该去哪里看?
一旦新用户 signup
到 aws-cognito
您可以使用 trigger
lambda functions
第 1 步: 打开 aws-cognito
User Pools
在 general setting
下点击 trigger
第 2 步: 您可以自定义 workflow
和 triggers
。您可以调用 lambda
函数
- 预注册
- 预认证
- 自定义消息
- Post 认证
- Post确认
- 定义身份验证质询
- 创建身份验证挑战
- 验证授权挑战
- 用户迁移
- 令牌生成前
第 3 步: Select 您的工作流程触发器 Post confirmation
您可以看到 lambda
函数。您必须 select lambda
函数。
添加 Cloudwatch:
第 1 步: 您已在 Permissions
选项卡下的 Configuration
下添加角色
第 2 步: 编辑 role
并为 CloudWatch
附加 policy
和 CloudWatch Logs