Я использовал Amplify для аутентификации и, похоже, работает нормально.Теперь я хочу настроить приложение администратора для CRUD с пулом пользователей.Кажется, мне нужно выйти из Amplify и использовать JavaScript SDK, чтобы использовать соответствующие API.
Как это работает? Мне не удалось выяснить, как получить токены, которые я получаюв Amplify в AWS.config или куда бы они ни пошли.
Какая это была борьба.Кажется, что код в документах устарел и что мало советов в Интернете хуже.Я подозреваю, что это потому, что объект Amplify содержит параметры конфигурации, и я должен перенести их в объект AWS.config.Я попробовал ниже и потерпел неудачу. Есть идеи, что мне нужно сделать? Я уверен, что ответы здесь будут полезны для многих новичков AWS.
У меня есть этот код в моем приложении Angular, но я думаю о Lambda.У меня есть сервер EC2 с Node.js в качестве другого варианта.
Это для dev на моем MBP, но я интегрирую его с AWS.
С кодом ниже я получаю сообщение об ошибкекоторый содержит частично:
Error in getCognitoUsers: Error: Missing credentials in config
at credError (config.js:345)
at getStaticCredentials (config.js:366)
at Config.getCredentials (config.js:375)
JWT, который я вставил в объект ниже, является AccessKeyID, который находится в хранилище моего браузера, и я использовал для аутентификации.
В console.log cognitoidentityserviceprovider У меня естьэтот объект, в частности:
config: Config
apiVersion: "2016-04-18"
credentialProvider: null
credentials: "eyJraWQiOiJwaUdRSnc4TWtVSlR...
endpoint: "cognito-idp.us-west-2.amazonaws.com"
region: "us-west-2"
endpoint: Endpoint
host: "cognito-idp.us-west-2.amazonaws.com"
hostname: "cognito-idp.us-west-2.amazonaws.com"
href: "https://cognito-idp.us-west-2.amazonaws.com/"
Эти функции передаются в виде последовательности.Я оставил несколько переменных в телах на случай, если кто-то захочет узнать, как получить эти данные от объекта пользователя.Я использовал их в различных попытках создания объектов, но большинство из них здесь не нужно, возможно.Все они дают правильные результаты из пользовательского объекта Amplify.
import { AmplifyService } from 'aws-amplify-angular';
import Amplify, { Auth } from 'aws-amplify';
import { CognitoIdentityServiceProvider } from 'aws-sdk';
import * as AWS from 'aws-sdk';
@Injectable()
export class CognitoApisService {
private cognitoConfig = Amplify.Auth.configure(); // Data from main.ts
private cognitoIdPoolID = this.cognitoConfig.identityPoolId;
private cognitoUserPoolClient = this.cognitoConfig.userPoolWebClientId;
private cognitoIdPoolRegion = this.cognitoConfig.region;
private cognitoUserPoolID = this.cognitoConfig.userPoolId;
...
constructor(
private amplifyService: AmplifyService,
) { }
public getAccessToken() {
return this.amplifyService
.auth() // Calls class that includes currentAuthenticaedUser.
.currentAuthenticatedUser() // Sets up a promise and gets user session info.
.then(user => {
console.log('user: ', user);
this.accessKeyId = user.signInUserSession.accessToken.jwtToken;
this.buildAWSConfig();
return true;
})
.catch(err => {
console.log('getAccessToken err: ', err);
});
}
public buildAWSConfig() {
// Constructor for the global config.
this.AWSconfig = new AWS.Config({
apiVersion: '2016-04-18',
credentials: this.accessKeyId,
region: this.cognitoIdPoolRegion
});
this.cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider(this.AWSconfig);
/* This doesn't get creds, probably because of Amplify.
this.cognitoidentityserviceprovider.config.getCredentials(function(err) {
if (err) console.log('No creds: ', err); // Error: Missing credentials
else console.log("Access Key:", AWS.config.credentials.accessKeyId);
});
*/
console.log('cognitoidentityserviceprovider: ', this.cognitoidentityserviceprovider);
this.getCognitoUsers();
}
public getCognitoUsers() {
// Used for listUsers() below.
const params = {
UserPoolId: this.cognitoUserPoolID,
AttributesToGet: [
'username',
'given_name',
'family_name',
],
Filter: '',
Limit: 10,
PaginationToken: '',
};
this.cognitoidentityserviceprovider.listUsers(params, function (err, data) {
if
(err) console.log('Error in getCognitoUsers: ', err); // an error occurred
else
console.log('all users in service: ', data);
});
}