You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Amplify Cognito中实现注册成功后自动登录?

基于手机号的无密码认证(注册后自动登录)方案

由于Amplify默认不会在注册完成后自动登录用户(尤其是启用MFA的场景),需要手动衔接注册、MFA验证与登录流程,以下是具体实现思路:

1. 注册后直接触发MFA验证并完成登录

注册流程完成后,用户处于未确认或需MFA验证状态,需主动触发验证码发送,待用户输入后完成验证并登录:

代码示例

import { Auth } from 'aws-amplify';

// 1. 手机号注册(无密码模式用临时占位密码)
const registerWithPhone = async (phoneNumber) => {
  try {
    const { user } = await Auth.signUp({
      username: phoneNumber,
      password: 'temp-nopass-123', // 无密码场景下仅作占位,后续无需使用
      attributes: { phone_number: phoneNumber }
    });
    // 注册成功后,自动触发MFA验证码发送(针对SMS MFA)
    await Auth.sendSMSCode(user);
    return user;
  } catch (err) {
    console.error('注册失败:', err);
  }
};

// 2. 验证MFA并自动登录
const verifyMfaAndAutoLogin = async (user, mfaCode) => {
  try {
    // 先完成注册确认(若用户池要求)
    await Auth.confirmSignUp(user.username, mfaCode);
    // 确认后立即执行登录
    const authUser = await Auth.signIn(user.username);
    // 处理MFA挑战(若登录时触发)
    if (authUser.challengeName === 'SMS_MFA') {
      const session = await Auth.sendSMSMFAAnswer(authUser, mfaCode);
      console.log('自动登录成功:', session);
      return session;
    }
    console.log('自动登录成功:', authUser);
    return authUser;
  } catch (err) {
    console.error('MFA验证/登录失败:', err);
  }
};

2. 自定义认证挑战简化无密码流程

若无需区分注册/登录步骤,可通过自定义认证挑战实现「手机号+短信验证码」一步完成注册+登录:

核心逻辑

  • 在AWS控制台配置自定义认证挑战Lambda触发器,当用户首次输入手机号时自动创建用户并发送验证码
  • 用户输入验证码后,Lambda验证通过直接返回认证会话,无需单独执行注册步骤

代码示例(前端调用)

const passwordlessAuth = async (phoneNumber, code) => {
  try {
    // 首次调用触发注册+验证码发送
    const initAuth = await Auth.signIn({ username: phoneNumber });
    if (initAuth.challengeName === 'CUSTOM_CHALLENGE') {
      // 输入验证码完成认证(自动完成注册+登录)
      const session = await Auth.sendCustomChallengeAnswer(initAuth, code);
      console.log('注册并登录成功:', session);
      return session;
    }
  } catch (err) {
    console.error('无密码认证失败:', err);
  }
};

关键注意事项

  • 确保用户池配置中启用「手机号作为用户名」,并开启SMS MFA或自定义认证挑战
  • 无密码场景下,注册时的password字段仅为Amplify API必填项,可使用固定临时值,无需告知用户
  • 自定义认证挑战需编写Lambda函数处理用户创建、验证码发送与验证逻辑

内容的提问来源于stack exchange,提问作者yossef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:41:02