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

rog*_*ger 7 asynchronous node.js promise async-await aws-amplify

使用:Nodejs + aws-amplify

AWS Amplify文档中,但他们登录后我还没有成功检查过用户。

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
});
Run Code Online (Sandbox Code Playgroud)

除非包装在内,否则我似乎无法获得用户会话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]
Run Code Online (Sandbox Code Playgroud)

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

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

我错过了什么吗?为什么Amplify.Auth不起作用?有没有一种方法可以检查任何一个用户的会话未到期并手动刷新它?

我对github有类似的问题。

jke*_*eys 2

看起来我无法获取用户会话,除非它包含在 Auth.signIn 中

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

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

顶级等待可能会帮助解决这样的用例。