Chaim Friedman
Chaim Friedman

Reputation: 6253

Is aws-amplify with auth broken?

I am trying to build a react app which will use the aws hosted ui for authentication. I am trying to use aws-amplify to achieve this, and so far I am having no such luck.

Here the docs state that the auth config should look like this.

const oauth = {
  domain : 'your-domain-prefix.auth.us-east-1.amazoncognito.com', 
  scope : ['phone', 'email', 'profile', 'openid','aws.cognito.signin.user.admin'], 
  redirectSignIn : 'http://www.example.com/signin/', 
  redirectSignOut : 'http://www.example.com/signout/',
  responseType: 'code',
}

But when I use this config setup I get the following error.

The parameters: App client Id, App web domain, the redirect URL when you are signed in and the redirect URL when you are signed out are required.

As you can see, those params are clearly supplied. So I clicked on the source map file linked in my console with the error message, and saw this.

if (data == null || !ClientId || !AppWebDomain || !RedirectUriSignIn || !RedirectUriSignOut) {
      throw new Error(this.getCognitoConstants().PARAMETERERROR);
    }

Which makes it seem more like the config should look a little something like this.

const auth = {
  AppWebDomain: "aaaaa",
  TokenScopesArray: ["phone", "email", "profile", "openid", "aws.cognito.signin.user.admin"],
  RedirectUriSignIn: "http://localhost:3000",
  RedirectUriSignOut: "http://localhost:3000",
  responseType: "token",
  ClientId: "aaa",
  UserPoolId: "aaa",
};

But when doing this, and trying to send the user to the hosted ui as the docs say here I get this error.

Uncaught TypeError: Cannot read property 'domain' of undefined

Once again I looked at the source and found this.

var domain = config.domain,

Which makes it seem like its expecting the config which does not work.

At this point I am really lost and can use any help at all.

Upvotes: 4

Views: 6534

Answers (1)

Gary Windham
Gary Windham

Reputation: 111

Going through the Auth.ts code, it appears that you have to include the userPoolId and userPoolWebClientId fields, in addition to oauth. Here's how I got it to work:

const oauth = {
  domain: 'XXXXXX.auth.us-west-2.amazoncognito.com',
  scope: ['phone', 'email', 'profile', 'openid', 'aws.cognito.signin.user.admin'],
  redirectSignIn: 'http://localhost:3000/',
  redirectSignOut: 'http://localhost:3000/',
  responseType: 'code'
};
Auth.configure({
  oauth: oauth,
  region: 'us-west-2',
  userPoolId: 'us-west-2_XXXXXXXXX',
  userPoolWebClientId: 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
});

Upvotes: 11

Related Questions