aws-amplify / aws-amplify/amplify-cli
[Exact Line Found] Amplify Auth doesn't work for non-trailing slash redirect
- Dominant language
- TypeScript
- Stars
- 2.9k
- Forks
- 825
- Avg merge
- 11d 23h
- Merged PRs (30d)
- 2
Description
Adding up here for visibility:
Found the bug: https://github.com/aws-amplify/amplify-js/blob/286c9e8fbec3ccdc5bf24edf3cbfb2bae370d751/packages/auth/src/OAuth/OAuth.ts#L128-L130
Please update this to not care about a trailing slash.
```
example.com/dashboard/?code=xxxxxxxx&state=xxxxxx == example.com/dashboard?code=xxxxxxxx&state=xxxxxx
```
Amplify shouldn't care about trailing slash, this line needs to be updated to disregard trailing slash from redirect url.
**Describe the bug**
I'm able to sign in with `Auth.federatedSignIn({provider: 'Facebook'});` in js, but I can't use that in typescript. `Auth.federatedSignIn({provider: CognitoHostedUIIdentityProvider.Facebook})` fails because it calls cognito-identity instead of cognito-idp. My local storage isn't updated with the cognito tokens and I get a 400 from `cognito-identity.us-east-1.amazonaws.com`. js does not call this endpoint ever, not sure why the ts SDK is calling it, or why there is no user-pool support for this. my export file is the same for both js and ts. The only difference is the federated sign in call above.
**To Reproduce**
Steps to reproduce the behavior:
1. setup amplify with user pools and facebook identity provider
2. create a new next ts project
3. import amplify newest version: `import { Auth } from 'aws-amplify';`
4. ```import { CognitoHostedUIIdentityProvider } from "@aws-amplify/auth/lib/types";```
5. Call `Auth.federatedSignIn({provider: CognitoHostedUIIdentityProvider.Facebook});`
6. Open your network tab in chrome and see that cognito-identity is being called. even though the aws-export file should have `"federationTarget": "COGNITO_USER_POOLS"`
eg:
```
import React from "react";
import { Button, Heading } from "@chakra-ui/react";
import { CognitoHostedUIIdentityProvider } from "@aws-amplify/auth/lib/types";
import { Auth } from 'aws-amplify';
interface loginProps {}
export const Login: React.FC = ({}) => {
function continueWithFacebook() {
return Auth.federatedSignIn({provider: CognitoHostedUIIdentityProvider.Facebook});
}
return (
continueWithFacebook()}>Continue with Facebook
);
};
export default Login;
```
This is the call from the typescript sdk. Notice its missing the login:
```
{"IdentityId":"us-east-1:xxx","Logins":{"cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxx":""}}
```
**Expected behavior**
The vanilla js version of this works. `Auth.federatedSignIn({provider: 'Facebook'});` works as expected. You can go to the application tab in chrome and see local storage updated. CognitoIdentityServiceProvider object will be under the local storage tab.
cognito-identity.us-east-1.amazonaws.com is called with a valid login.
```
{"IdentityId":"us-east-1:xxx","Logins":{"cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxx":"eyJraWQiOiJWTzYrsasfasdf"}}
```
**Code Snippet**
Please provide a code snippet or a link to sample code of the issue you are experiencing to help us reproduce the issue. (Be sure to remove any sensitive data)
Working: `Auth.federatedSignIn({provider: 'Facebook'});` in js
Not working: `Auth.federatedSignIn({provider: CognitoHostedUIIdentityProvider.Facebook})` in tsx
**What is Configured?**
If applicable, please provide what is configured for Amplify CLI:
* Which steps did you follow via Amplify CLI when configuring your resources.
* Which resources do you have configured?
* If applicable, please provide your `aws-exports` file:
```
const awsmobile = {
"aws_project_region": "us-east-1",
"aws_cognito_identity_pool_id": "us-east-1:xxx",
"aws_cognito_region": "us-east-1",
"aws_user_pools_id": "us-east-1_xxx",
"aws_user_pools_web_client_id": "xxx",
"oauth": {
"domain": "homulator-auth-dev.auth.us-east-1.amazoncognito.com",
"scope": [
"phone",
"email",
"openid",
"profile",
"aws.cognito.signin.user.admin"
],
"redirectSignIn": "http://localhost:3000/dashboard/",
"redirectSignOut": "http://localhost:3000/",
"responseType": "code"
},
"federationTarget": "COGNITO_USER_POOLS"
};
* If applicable, provide more configuration data, for example for Amazon Cognito, run `aws cognito-idp describe-user-pool --user-pool-id us-west-2_xxxxxx` (Be sure to remove any sensitive data)
Environment
```
npx envinfo --system --binaries --browsers --npmPackages --npmGlobalPackages
```
**Smartphone (please complete the following information):**
- Browser Chrome
**Additional context**
Add any other context about the problem here.
**_You can turn on the debug mode to provide more info for us by setting window.LOG_LEVEL = 'DEBUG'; in your app._**
Contributor guide
Assessment
This issue has not been assessed yet.