繁体   English   中英

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

[英]aws-amplify auth currentSession returns no current user

使用:Nodejs + aws-amplify

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

索引.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
});

看起来我无法获得用户会话,除非它被包裹在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不起作用? 有没有一种方法可以检查任一用户的会话是否已过期并手动刷新它?

我对github有类似的问题。

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

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

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

顶级 await可能有助于解决这样的用例。

我遇到了同样的问题,最后我这样写了。

import Auth from "@aws-amplify/auth";
Auth.currentAuthenticatedUser().then((user) => {
  const session = user.getSignInUserSession();
  if (session) {
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: "REGION:POOL_ID",
      Logins: {
        "cognito-idp.REGION.amazonaws.com/ID": session
          .getIdToken()
          .getJwtToken(),
      },
    });
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM