amazon-archives / aws-serverless-auth-reference-app

Serverless reference app and backend API, showcasing authentication and authorization patterns using Amazon Cognito, Amazon API Gateway, AWS Lambda, and AWS IAM.
Other
752 stars 194 forks source link

Friends List inside User Pools? #4

Closed rohitvinay closed 7 years ago

rohitvinay commented 7 years ago

I want to create a friends section in it, Is it a good method to create a a friends attribute inside Cognito User Pool Id, or do i need to make use of profiles table in DynamoDB and access its data and create friends list in return.

justonian commented 7 years ago

Hi Rohit-

Assuming that "friends" is a set, you would want to use a DynamoDB table or some other data store to keep track of each user's friends. Cognito User Pools attributes are meant to be specific to a single user, and the custom attributes which you can define can only be a number or a string of up to 20 characters. Given the size constraint and the fact that you may want to have several indexes on a table showing various friends in different manners, this would be better held in a separate table though you can use the Cognito unique IDs for the user pool user ID or identity ID (if using federated identities) to track friends, if desired.

Let us know if this clarifies for you.

Justin

rohitvinay commented 7 years ago

@justonian I see that there is a profiles table setup, can i use that to store list of all users, or is there any use case for it. Thanks

justonian commented 7 years ago

You can. To change the table definition you'd need to modify api/lambda/data.js, though and then run gulp delete_tables and gulp create_tables.

The reason why we're not storing some of the profile information, in our case a profile picture, in the user pools attributes directly is because we want to also evolve the app to showcase login with FB/Google and SAML, in which case the customer's Cognito Federated Identity ID is the best option. However, logging in with Google or SAML wouldn't allow access to the user pool ID's attributes hence we're storing those centrally in a DynamoDB table.

Hope this helps.

Justin