按用户名或ID访问个人资料页面

时间:2015-07-15 14:43:40

标签: javascript node.js meteor iron-router

我在Meteor中使用用户系统。会计是使用电子邮件创建的,但我希望为用户提供在其设置中设置唯一用户名的选项。

我有这条路线

Router.route('userProfile', {
  path: '/users/:userId',
  template: 'userProfile',
  fastRender: true,
  waitOn: function() {
    return Meteor.subscribe('singleUser', this.params.userId);
  },
  data: function() {
    return {
      user: Meteor.users.findOne(this.params.userId)
    };
  }
});

但如果用户设置了他/她的用户名,则路径路径应为path: '/:username',。我认为这就是Facebook,LinkedIn等也是如此。

1 个答案:

答案 0 :(得分:0)

只需选择单个参数并在您的出版物和数据函数中进行检查:

Meteor.publish('singleUser', function (userIdOrName) {
  return Meteor.users.find({ $or: [ { _id: userIdOrName }, { username: userIdOrName } ] }, {limit: 1});
});

Router.route('userProfile', {
  path: '/users/:userIdOrName',
  template: 'userProfile',
  fastRender: true,
  waitOn: function() {
    return Meteor.subscribe('singleUser', this.params.userIdOrName);
  },
  data: function() {
    return {
      user: Meteor.users.findOne({ $or: [ { _id: this.params.userIdOrName }, { username: this.params.userIdOrName } ] })
    };
  }
});

请注意,在这种情况下,您应确保用户无法将其他人的ID设置为其用户名,否则他/她可能会冒充此人。