AWS
vue.js
cognito
nuxt.js

Error: CognitoIdentityServiceProvider.AuthenticationDetails is not a constructor

Vue.js + nuxt.jsとcognitoの連携をしようとした

ここを参考に実装していった。
http://lealog.hateblo.jp/entry/2017/01/25/105528

認証のところでエラーになる

しかし認証のところでエラーになる。

var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

CognitoIdentityServiceProvider.AuthenticationDetails is not a constructor

調べてみたら同じところで詰まっている人は複数人いるようだが、解決されていないように見える。

https://github.com/aws/amazon-cognito-identity-js/issues/45

調査

コードを読み込んでいくと、

authenticateUser: amazon-cognito-identity-jsにあるクラス
CognitoIdentityServiceProvider: aws-sdkにあるクラス

ということで、authenticateUserCognitoIdentityServiceProviderにはデフォルトでない状態である。

そこで、下記ファイルにてenhanceしている。

amazon-cognito-identity-js/enhance.js
import CognitoIdentityServiceProvider from 'aws-sdk/clients/cognitoidentityserviceprovider';
import * as enhancements from './src';

export * from './src';

Object.keys(enhancements).forEach(key => {
  CognitoIdentityServiceProvider[key] = enhancements[key];
});

つまり純粋にAuthenticationDetailsをnewして渡しちゃえば同じことなんじゃ?と思って試したら無事解決。

const {AuthenticationDetails} = require('amazon-cognito-identity-js')
...
const authenticationDetails = new AuthenticationDetails({