Amplify 的completeNewPassword 方法针对用户数据抛出 TypeError

2024-04-25

我尝试将自定义 UI 与 aws Amplify 结合使用,但遇到了 Auth.completeNewPassword 问题。任何使用此方法的尝试都会引发错误Error in v-on handler: "TypeError: Cannot read property 'username' of null.

在此之前使用过给定的 UI,我知道当管理员创建 Cognito 用户时,他们会在首次登录时发送到“新密码”表单。但是,Amplify 文档中的示例让 signIn 方法在发现用户需要新密码后立即调用completeNewPassword 方法。

以下片段直接来自亚马逊的文档:

import { Auth } from 'aws-amplify';

Auth.signIn(username, password)
.then(user => {
    if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
        const { requiredAttributes } = user.challengeParam; // the array of required attributes, e.g ['email', 'phone_number']
        Auth.completeNewPassword(
            user,               // the Cognito User Object
            newPassword,       // the new password
            // OPTIONAL, the required attributes
            {
              email: '[email protected] /cdn-cgi/l/email-protection',
              phone_number: '1234567890'
            }
        ).then(user => {
            // at this time the user is logged in if no MFA required
            console.log(user);
        }).catch(e => {
          console.log(e);
        });
    } else {
        // other situations
    }
}).catch(e => {
    console.log(e);
});

我尝试用几种不同的方法来实现相同的 TypeError 结果。如果我单独调用completeNewPassword方法,将用户存储为变量并将其传入,尝试重新登录并将该用户传递给completeNewPassword等,那么每次都会出现相同的TypeError,这并不重要。

例如,以下方法将在第一次单击登录按钮时正确记录“用户”对象,但在尝试提交新密码时单击同一按钮时会在该行之前失败。

signIn () {
    Auth.signIn(this.user_name, this.password)
    .then(user => {
        if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
        console.log(user)
        const { requiredAttributes } = user.challengeParam;
        this.$parent.$parent.pageStatus.passwordSetPanel = true;
        Auth.completeNewPassword(
            user,
            this.newPassword
        )
        }
    })
},

附加信息:

  1. 框架是Vue
  2. 能够使用给定的 UI 确认新用户的新密码
  3. “用户名”类型错误不是来自我的js,而是指用户承诺中的用户名参数(我已经检查过,并且没有尝试将 user_name 传递到它想要用户名的地方)

EDIT

设法找到一个半工作的解决方案,代码如下:

signIn () {
    this.$parent.$parent.pageStatus.loginPanel = false;
    this.$parent.$parent.loading = true;
    Auth.signIn(this.user_name, this.password)
    .then(async user => {
        if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
        const loggedUser = await Auth.completeNewPassword(
            user,
            this.password,
        )
        this.$parent.$parent.pageStatus.passwordSetPanel = true
        }
    })
}

这设法更新用户,但我必须将密码设置为 this.password (原始的、待更改的密码)才能使其正常工作。看起来问题是 Amplify 希望我使用相同的函数来登录并调用completeNewPassword。但这些的 UI 需要分为两个不同的面板。


我设法使用 RxJS BehaviourSubject 解决了这个问题。

您可以查看BehaviorSubject的典型行为示例here https://stackoverflow.com/questions/39494058/behaviorsubject-vs-observable.

声明BehaviorSubject:BehaviorSubject的初始值为null。

congitoUser = new BehaviorSubject(null);

订阅从 Auth.SignIn(即认知用户)返回的值。

 login(user: { username: string; password: string }) {
    Auth.signIn(user)
      .then((data) => {
        this.congitoUser.next(data);
        if (user) {
          if (data.challengeName === 'NEW_PASSWORD_REQUIRED') {
            this.router.navigateByUrl('/change-password');
          } else {
            this.router.navigateByUrl('/home');
          }
        }
      });
  }

现在订阅将返回 Cognito 用户的正确值。

updatePassword(password: string) {
// subscribe to cognito user (behaviour subject) and use the value it returned.
    this.congitoUser.subscribe((value) => {
      Auth.completeNewPassword(value, password, [])
        .then((data) => {
         console.log(data);
        })
        .catch((err) => console.error('Error', err));
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Amplify 的completeNewPassword 方法针对用户数据抛出 TypeError 的相关文章

  • Dockerfile 从 amazon s3 或其他需要凭据的源复制文件

    我正在尝试构建 Docker 映像 并且需要将一些文件从 S3 复制到该映像 我正在使用的 Dockerfile 内部 Dockerfile FROM library ubuntu 16 04 ENV LANG C UTF 8 LC ALL
  • 在 Postman 中的后续请求中使用身份验证令牌

    我的应用程序 API 需要通过身份验证令牌进行身份验证 简而言之 我们向 authentication端点 它使用包含令牌的 JSON 对象进行响应 例如 token xxxxxxxxxxxxxxxxxxxxxx 我们应用程序中的每个其他
  • 在闪亮的应用程序和多个页面中进行身份验证

    在我正在开发的系统中 我有 3 个不同的参与者 用户 管理员 支持团队 使用 Shiny App 我想知道如何向这三个参与者进行身份验证 每个参与者只能访问他们的页面 我发现使用闪亮的服务器专业版可以实现这一点 但它不是免费的 有什么方法可
  • ElasticCloud 的 ElasticSearch 身份验证错误?

    我刚刚在 ElasticCloud 上设置了一个新的 ElasticSearch 集群 我正在尝试遵循帮助文档 https cloud elastic co help 它说您可以按如下方式发布文档 curl https
  • AWS ALB 截断 HTTP 响应

    我有一个带有目标组的 ALB 和运行 PHP API 的 ECS 集群 我正在尝试查询 API 以获得 CSV 响应 但如果请求通过 ALB 我会得到被截断的结果 当我通过 SSH 连接到运行集群的 EC2 实例并尝试手动运行curl 通过
  • 使用 AWS SSO 时 AWS Java SDK 未找到配置文件

    当我使用 AWS SSO 登录时 我无法访问 aws 我使用以下方式从计算机登录 aws sso login profile staging 配置文件的配置如下 profile staging sso start url https som
  • npm install -D sass-loader node-sass Vue.js 2021

    您好 问题是为 Vue js 设置 SASS 我跑 Node js 15 7 0 Vue js vue cli 4 5 11 这是我在运行此命令时在控制台中遇到的错误 npm install D sass loader 节点 sass np
  • 生产中未使用快速会话设置 Cookie

    我的应用程序分为客户端和服务器 客户端是托管在 Now sh 上的前端 Nextjs 应用程序 服务器是使用 Express 创建并托管在 Heroku 上的后端 因此域是 client app now sh 和 server app he
  • 从可组合项访问引用值

    这是我的 Vue3 应用程序代码
  • 使用自己的 Web 应用程序 API - 使用 OAuth2 进行身份验证过程

    Overview 我目前正在为图像共享应用程序创建 API 该应用程序将在网络上运行 将来在移动设备上运行 我了解 API 构建的逻辑部分 但我仍然在努力满足我自己对身份验证部分的要求 因此 我的 API 必须可供全世界访问 具有访客访问权
  • 使用 laravel 检查活动用户状态

    这是非常标准的登录功能和验证 效果很好 但我还想检查用户是否处于活动状态 我在用户表中设置了一列 并将 活动 设置为 0 或 1 public function post login input Input all rules array
  • 通过服务删除 Windows 登录屏幕

    我正在尝试从服务启动的可执行文件中删除 Windows 登录屏幕 winlogon 该服务将随 Windows 自动启动 并等待来自另一台计算机的命令 当它收到命令时 它将启动一个 exe 该 exe 将在特定用户名下启动 cmd exe
  • 登录方式使用GINA定制

    我知道在 GINA 中找到大师并不容易 但我的问题最接近进程间通信 IPC 我用非托管 c 编写了我的自定义 GINA 我在其中包含了一个方法来检查用户尝试的指纹的有效性为了登录 该函数将调用正在运行的系统Windows服务中用C 编写的一
  • 如何在 AWS Amplify 上运行 React/Redux 应用程序的代理

    我最近实施了Proxy 在 Express js 中 对于我的反应应用程序发出请求时隐藏 API URL 当我在本地主机上运行代理和应用程序时 它工作得非常好 现在我已准备好将我的应用程序部署到AWS 放大 我对如何让我的代理在那里运行有点
  • 尝试使用 SQL 身份验证登录失败

    我正在尝试使用 sa 用户名及其密码连接到 SQL Server 2008 在 SQL Server 日志文件中我看到以下错误 用户 sa 登录失败 原因 尝试使用 SQL 登录 认证失败 服务器配置为 Windows 身份验证 仅有的 当
  • 访问 .js 文件中的 Nuxt 插件

    假设我有一个脚本文件 foo js function doStuff how to access store and other plugins here export default doStuff 如果不将调用组件作为参数传递 我如何访
  • 如何将 kubernetes LoadBalancer Ingress URL 发布到 aws Route53

    今天 当我通过 aws 使用 kubernetes 启动一个应用程序时 它公开了一个公开可见的 LoadBalancer Ingress URL 但是要将其链接到我的域以使公众可以访问该应用程序 我需要在每个设备上的浏览器中手动进入 aws
  • 使用单个查询和每用户密码盐进行用户登录

    我决定使用存储在数据库中的每用户盐来实现用户登录 盐作为密码的前缀 该密码使用 SHA 进行哈希处理并存储在数据库中 过去 当我不使用盐时 我会使用典型的方法 使用用户输入的用户名和密码来计算查询返回的行数 然而 对于每个用户的盐 您需要先
  • AWS Textract InvalidParameterException

    我有一个 Net core 客户端应用程序 根据 AWS 文档 使用带有 S3 SNS 和 SQS 的 amazon Textract 检测和分析多页文档中的文本 https docs aws amazon com texttract la
  • AWS LoadBalancer监听多个端口

    我有一些应用程序在 aws 中作为微服务运行 其中一些在端口 80 上运行 一些在端口 3000 上运行 我希望我的 ALB 侦听这两个端口上的流量 然后我有一个ListenRules将流量引导至微服务 我想实现如下所示的目标 Resour

随机推荐

  • Hive如何存储数据,什么是SerDe?

    当查询表时 SerDe 将将文件中的字节中的一行数据反序列化为 Hive 内部使用的对象来操作该行数据 执行 INSERT 或 CTAS 时 请参阅第 441 页上的 导入数据 表的 SerDe 将将 Hive 的一行数据的内部表示序列化为
  • React useState() 不同步更新值[重复]

    这个问题在这里已经有答案了 如果在设置值后立即调用 React useState 不会更新变量的值 我读过有关 useEffect 的内容 但并不真正知道这对于这个特定场景有何用处 完整代码 https codesandbox io s n
  • 如何从 ControlTemplate 检索 VisualChild

    我在 NET 3 5 SP1 中有一个 WPF 应用程序 它正在使用TabControl 在那我们有TabItems 这反过来又有它们的Styles确定当前显示的项目 假设我们有一个TabItem named Books now Books
  • Cassandra 中的 SASI 索引似乎有一些错误

    我刚刚开始在 Cassandra 3 7 0 上使用 SASI 索引 遇到了一个问题 我怀疑这是一个错误 我几乎没有追踪到该错误出现的情况 以下是我发现的 使用 SASI 索引查询时 它可能会错误地返回 0 行 改变一点条件 它又可以工作了
  • 在 Bokeh 服务应用程序中绘制本地图像

    我正在尝试使用绘制 png 图像ImageURL本地存储在应用程序中的类 static目录 在下面的代码中 当使用同一图像的 Web url 时 它会按预期工作 但所有创建本地 url 的尝试都会失败 此外 当运行基本相同的代码并输出到文件
  • 是否可以编写 TFS 查询来获取任务实际花费的时间?

    我一直在使用 TFS 来跟踪我的待办事项 现在我正在尝试编写一个查询来查看我在过去 7 天内完成特定任务所花费的时间 到目前为止我有这个查询 工作项类型 任务 AND 状态 完成 AND 关闭日期 Today 7 AND 区域路径 Proj
  • SQL Server:将((int)年,(int)月,(int)日)转换为日期时间[重复]

    这个问题在这里已经有答案了 可能的重复 使用 T SQL 创建日期 https stackoverflow com questions 266924 create a date with t sql 我有一个数据表 将每年 月份和日期的值存
  • 这段代码的复杂度是多少? (大O)这是线性的吗?

    for int i 0 i
  • git fetch 和 checkout FETCH_HEAD 的作用是什么?

    以下命令的作用是什么 git fetch
  • Scala 中的部分排序集合

    我正在尝试对链表节点的集合进行排序 该集合包含来自多个链表的节点 必须在每个列表中维护排序 但跨列表的排序并不重要 PartialOrdering T 似乎是自然的选择 但我在 Scala 中找不到任何支持它的标准函数 例如 sort只需要
  • Object.prototype.__defineGetter__(和 __defineSetter__)polyfill

    我知道 defineGetter and defineSetter 方法名称确实是奇怪且已弃用 http whereswalden com 2010 04 16 more spidermonkey changes ancient esote
  • 每个表都应该有主键吗?

    我正在创建一个数据库表 但没有为其分配逻辑主键 每个表都应该有主键吗 简短回答 yes 长答案 你需要你的桌子可以加入一些东西 如果您希望表聚集 则需要某种主键 如果您的表设计不需要主键 请重新考虑您的设计 很可能您遗漏了某些内容 为什么要
  • Android:想要在相机预览上放置剪影叠加

    我想知道如何在相机预览上添加剪影 到目前为止 我已经完成了以下示例 它只是预览相机 http developer android com reference android view TextureView html http develo
  • 快速排序和调整快速排序有什么区别?

    快速排序和调整快速排序之间的根本区别是什么 快速排序有何改进 Java 如何决定使用它而不是合并排序 正如蜥蜴比尔所说 调整的快速排序仍然具有与基本快速排序相同的复杂性 O N log N 平均复杂度 但调整的快速排序使用一些不同的方法来尝
  • UIScrollView 缩小具有 -ve 原点的视图

    我有一个 UIScrollView 在此我有一个 UIView 它的框架具有负原点 我需要限制滚动视图 以便您无法滚动整个视图 我已经在这个滚动视图中实现了缩放 缩放时 滚动视图将根据比例调整可缩放视图的大小 但它并不能调整原点 所以如果我
  • Python .NET WinForms - 如何将信息从文本框传递到按钮单击事件

    在回答我的问题之前 我正在 自学 学习 Python 和 NET CLR 如何相互交互 这是一次有趣的经历 但有时也是一次令人沮丧的经历 话虽如此 我正在使用 NET WinForm 它应该只是传递输入到文本框中的数据并通过消息框显示它 学
  • 货运公司如何决定是否重建部门?

    我正在考虑跳过货物中的依赖关系构建步骤 我有一个简单的项目 使用 3 个板条箱作为依赖项 在Cargo toml 我使用一次构建项目cargo build release 现在我有另一个项目 它使用其中提到的相同依赖项Cargo toml文
  • 重置流的状态

    我有一个问题与 stackoverflow 上的这个问题有点相似std cin clear 无法将输入流恢复到良好状态 https stackoverflow com questions 4960399 stdcin clear fails
  • 用逗号连接字符串并在每个元素周围加上引号

    我有以下字符串 s tring abcd efgh igkl mnop qrst uvwx yz 我想创建一个列表并用逗号分隔它并在每个元素周围加上引号 如下所示 some list abcd efgh igkl mnop qrst uvw
  • Amplify 的completeNewPassword 方法针对用户数据抛出 TypeError

    我尝试将自定义 UI 与 aws Amplify 结合使用 但遇到了 Auth completeNewPassword 问题 任何使用此方法的尝试都会引发错误Error in v on handler TypeError Cannot re