node.js - aws-amplify auth currentSession 不返回当前用户

标签 node.js asynchronous promise async-await aws-amplify

使用:Nodejs + aws-amplify

来自 aws amplify documentation ,但我没有在用户登录后成功检查用户。

index.js

const Amplify = require('aws-amplify');
global.fetch = require('node-fetch'); // [source](https://github.com/aws-amplify/amplify-js/issues/876)
global.navigator = {};

Amplify.default.Auth({
    identityPoolId: IDENTITYPOOLID,
    region: REGION,
    userPoolId: USERPOOLID,
    userPoolWebClientId: APPCLIENTID,
});

Amplify.Auth.signIn(username, password).then(user => {
    localstorage.set('user', JSON.stringify(user));
    console.log(user); // "cognitoUser" object
    return Amplify.Auth.getSession();
}).then(session => {
    console.log(session); // "CognitoSession" object
}).catch(err => {
    console.log(err);
});

// PROBLEM
Amplify.Auth.getSession().then(session => {
    console.log(session);
}).catch(err => {
    console.log(err); // PRINT: no current user
});

看起来我无法获得用户 session ,除非它被包裹在 Auth.signIn 中.我尝试使用;
// Problem
let userObj = JSON.parse(localstorage.get('use'));
Amplify.Auth.userSession(userObj).then(data => {
    console.log(data);
});
/// getSession is not a function

console.log(Amplfy.Auth.userSession); // PRINT: [Function]

我可以验证 userSession 是函数并且在库中,我看到的问题是 getSession()不在我存储在本地存储中的 CognitoUser 对象内。

如果这是问题所在,我找不到任何可以帮助我将 localstorage 对象转换为 CognitoObj 的函数。我唯一能做的就是每次都签署用户,这忽略了这个库的全部目的。

我错过了什么吗?为什么是 Amplify.Auth不起作用?有没有办法可以检查任一用户的 session 未过期并手动刷新它?

我有类似的问题 github .

最佳答案

It looks like I cannot get user session, unless it is wrapped inside Auth.signIn



简而言之,这就是 Node/JS 异步编程模型。如果异步操作之间有一些时间依赖性,则必须将后面的操作包装在回调或 then 中。 ,和/或相反 await 中的早期操作ed promise 。

事实上,如果您有一些可以并发运行/彼此之间没有依赖关系的异步操作,您可以使用 Promise.all API 优化您的代码。以便它同时发送所有异步请求并在最后一个完成时解析。

Top-level await可能会帮助解决这样的用例。

关于node.js - aws-amplify auth currentSession 不返回当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630323/

相关文章:

node.js - session ID cookie 应该签名吗?

javascript - 如何检查 Node.js 中是否设置了环境变量?

node.js - 如何通过 Javascript (node.js) 生成 Azure SAS token

node.js - 我想在 npm 中创建一个文件,但不想追加该文件(如果它已经存在)

c# - 等待的任务以取消状态结束不会抛出

javascript - 在 iframe 加载之前运行脚本

JavaScript Promises 不等待循环完成执行

javascript - 根据之前的模糊禁用焦点

node.js - 多个回调会降低nodejs性能吗?

javascript - Vue.js async/await 与 then 函数不执行