Fab*_*oen 6 recaptcha amazon-web-services aws-cognito
如果用户是机器人或人类,我的问题是POST-Request.
无法从客户端发送请求表单,否则您将在OPTIONS请求中收到错误:"(对预检请求的响应未通过访问控制检查:否存在'Access-Control-Allow-Origin'标头在请求的资源上)",这是因为请求只能从服务器端进行.
在AWS-Cognito中,有一种方法可以使用预身份验证功能来检查类似的内容,但是我找不到将响应元素放入函数的方法.
所以我的问题是:有没有办法在AWS Cognito上实施Google recaptcha?
您可以在注册请求中发送此信息validationData,并在触发器 SNS Lambda 中执行验证码验证逻辑
这是使用AWS Amplify 库的片段,请原谅打字稿:
客户
class AuthService {
...
public signUp(
emailAddress: string,
phoneNumber: string,
password: string,
recaptchaToken: string
): Observable<ISignUpResult> {
const recaptchaTokenAttributeData: ICognitoUserAttributeData = {
Name: 'recaptchaToken',
Value: recaptchaToken
};
const signupParams: SignUpParams = {
username: emailAddress,
password,
attributes: {
'email': emailAddress,
'phone_number': phoneNumber
},
validationData: [
new CognitoUserAttribute(recaptchaTokenAttributeData)
]
};
return fromPromise(Auth.signUp(signupParams));
}
...
}
Run Code Online (Sandbox Code Playgroud)
PreSignUp SNS Lambda 代码上的 Cognito 触发器
export async function validateHuman(
event: CognitoUserPoolTriggerEvent,
context: Context,
callback: Callback
): Promise<CognitoUserPoolTriggerHandler> {
try {
const recaptchaToken: string = event.request.validationData.recaptchaToken;
console.log(recaptchaToken);
const isHuman: boolean = await googleRecaptcha.verify({response: recaptchaToken}, (error: Error) => {
if (error) {
console.error(error);
return false;
}
return true;
});
if (!isHuman) {
throw new Error('Not human');
}
callback(null, event);
return;
} catch (error) {
console.error(error);
callback(null, new Response(INTERNAL_SERVER_ERROR, {message: 'Something went wrong'}));
return;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |