clinical:user-model
A model for a user which contains useful methods and can be extended by other packages by extending it's prototype to add methods that add functionality that are pertinent to their purpose. For example the socialize:friendships package extends the user model to provide helpers which return friend requests and friends for the user.
======================================
User() - Extends BaseModel
User.prototype.displayName() - A representation of the user. "You" if the instance is the same as the current user, instance.username otherwise.
User.prototype.isSelf(user) - Checks if one user is another user by comparing _id
s.
User.prototype.defaultEmail - Returns the first email address in the list of emails.
Q: Is there any documentation on the User Profile?
The basic user profile is structured like the following JSON document:
1{ 2 username: 'jdoe', 3 emails: [{'address': 'somebody@somewhere.com', 'verified': true}], 4 profile: { 5 'name': 'Jane Doe' 6 } 7}
The intention is that the first email address in the 'emails' list is the primary contact, where people want to be emailed, and the other addresses in the list are alternates that work for login but do not receive email.
Q: I'm having problems managing Meteor.users in my social app. Help?
The pattern for social apps involves two publications. One for yourself, and one for other people. You'll want something like the following:
1// Publish a person's own user profile to themselves 2Meteor.publish('userProfile', function (userId) { 3 return Meteor.users.find({_id: this.userId}, {fields: { 4 '_id': true, 5 'username': true, 6 'profile': true, 7 'profile.name': true, 8 'profile.avatar': true, 9 'profile.username': true, 10 11 'profile.favoriteColor': true, 12 'profile.selectedTheme': true, 13 14 'profile.address': true, 15 'profile.city': true, 16 'profile.state': true, 17 'profile.zip': true, 18 19 'emails': true, 20 'emails[0].address': true, 21 'emails.address': true 22 }}); 23 24}); 25 26// Publish the user directory which everbody can see 27Meteor.publish("usersDirectory", function () { 28 return Meteor.users.find({}, {fields: { 29 '_id': true, 30 'username': true, 31 'profile': true, 32 'profile.name': true, 33 'profile.avatar': true, 34 'profile.username': true, 35 36 'emails': true, 37 'emails[0].address': true, 38 'emails.address': true 39 }}); 40});
Note that the profile details, such as address and theme preferences will only be visible to an individual user, and won't be visible to people browsing the user directory.
======================================
Licensing
MIT. Use as you will.