Как я могу принудительно обновить токен когнито от клиента

Я использую aws ampify, и я знаю, что токены автоматически обновляются при необходимости, и это делается за кулисами.

Что мне нужно сделать, так это изменить настраиваемый атрибут пользователя в пуле пользователей когнитивного анализа через серверный процесс Lambda. Я могу это сделать, и это работает. Однако пользователь веб-клиента никогда не видит этот новый настраиваемый атрибут, и я думаю, что единственный способ увидеть его - это обновить токен, поскольку значение хранится в токене JWT.


person Dan Herman    schedule 19.01.2018    source источник
comment
не currentCredentials aws.github.io/aws -amplify / api // classes / вернуть вам актуальные токены?   -  person iurii    schedule 28.01.2018


Ответы (4)


Недокументировано, но вы можете использовать метод refreshSession для User. Ваш следующий вызов currentAuthenticatedUser и currentSession будет иметь обновленные атрибуты профиля (и группы).

User = Auth.currentAuthenticatedUser()
Session =  Auth.currentSession()

User.refreshSession(Session.refreshToken))
person Nouman    schedule 10.10.2018
comment
Вы знаете, в какой версии Amplify это есть? В той версии, которую я использую, я получаю User.refreshSession is not a function - person Dan Herman; 11.10.2018

Как здесь сказано:

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

Токен доступа и идентификатор ID действительны в течение 1 часа. С Amplify вы можете получить информацию о сеансе, используя currentSession или currentUserInfo в классе Auth, чтобы иметь возможность получать информацию о токенах.

person Yassou    schedule 25.05.2018

Вот как вы можете обновлять токены по запросу (принудительно)

import { Auth } from 'aws-amplify';

try {
  const cognitoUser = await Auth.currentAuthenticatedUser();
  const currentSession = await Auth.currentSession();
  cognitoUser.refreshSession(currentSession.refreshToken, (err, session) => {
    console.log('session', err, session);
    const { idToken, refreshToken, accessToken } = session;
    // do whatever you want to do now :)
  });
} catch (e) {
  console.log('Unable to refresh Token', e);
}

person Zohaib Ijaz    schedule 10.04.2019

Правильное решение с 2021 года - позвонить await Auth.currentAuthenticatedUser({bypassCache: true}).

person andreialecu    schedule 21.05.2021