【问题标题】:How to save additional user details on meteor.js, such as home address如何在meteor.js 上保存其他用户详细信息,例如家庭地址
【发布时间】:2015-05-12 05:09:52
【问题描述】:

我是 Meteor.js 的新手,并按照 meteor.com 上的教程创建任务列表以登录和发布任务。将accounts-ui 和accounts-password 包添加到项目中非常容易。但是,在注册时,我还希望用户提供家庭地址信息,甚至可能更多。我希望将此信息存储在链接到用户 ID 的 mongodb 中。你会怎么做呢?

【问题讨论】:

  • 使用 Accounts.createUser() docs.meteor.com/#/full/accounts_createuser 允许添加配置文件的选项,该配置文件是存储在该用户的数据库文档中的附加对象。在几分钟内添加我的答案哪个代码示例。
  • 举个例子就好了!谢谢鲨鱼字节!

标签: javascript mongodb meteor atmosphere.js


【解决方案1】:

您可以在用户的​​个人资料字段中添加信息。

事件中的类似内容(客户端代码)

Template.example.events({
 'click #register':function(event,template){
   var homeAddress = template.$('homeAddress').val();
     Accounts.createUser({
       email: email,
      password: password,
      profile: { homeAddress: homeAddress }
    });
 }
})

请记住,usernameemailprofile 字段默认由 accounts-password 包发布。

【讨论】:

    【解决方案2】:

    您正在寻找的是使用 Accounts.createUser() 时配置文件的额外选项。有关如何使用的更多详细信息,请查看文档:http://docs.meteor.com/#/full/accounts_createuser

    profile 选项采用一个对象,该对象正在添加到与用户关联的数据库文档中。试了下面的例子后,运行下面的命令,看看是不是存入了数据库。

    In the directory of your project:
    $ meteor mongo
    $ db.users.find()
    

    以下示例返回:

    { "_id" : "kJNaCtS2vW5qufwJs", "createdAt" : ISODate("2015-05-11T20:50:21.484Z"), "services" : { "password" : { "bcrypt" : "$2a$10$LrcZ5lEOlriqvkG5pJsbnOrfLN1ZSCNLmX6NP4ri9e5Qnk6mRHYhm" }, "resume" : { "loginTokens" : [ { "when" : ISODate("2015-05-11T20:50:21.493Z"), "hashedToken" : "CXKwUhEkIXgdz61cHl7ENnHfvdLwe4f0Z9BkF83BALM=" } ] } }, "emails" : [ { "address" : "sharkbyte@someemail.com", "verified" : false } ], "profile" : { "firstName" : "shark", "lastName" : "byte" } }
    

    作为一个警告,我没有使用accounts-ui,只使用没有内置ui的accounts-password。但这里是如何创建一个带有额外字段的简单创建帐户模板(在此示例中:名字和姓氏以及组织)。

    html代码:

    <head>
      <title>test</title>
    </head>
    
    <body>
      <!-- checks if someone is logged in -->
      {{#if currentUser}}
        {{> userPage}}
      {{else}}
        {{> loginPage}}
      {{/if}}
    </body>
    
    <template name="userPage">
      <button id="logout">logout</button>
      <p>You are logged in!</p>
    </template>
    
    <template name="loginPage">
      <form><!-- create account form, use a different one for normal logging in -->
        <input type="text" id="firstName" placeholder="First Name">
        <input type="text" id="lastName" placeholder="Last Name">
        <input type="text" id="organization" placeholder="Organization (optional)">
        <input type="text" id="email" placeholder="Email Address">
        <input type="password" id="password" placeholder="Password">
        <input type="password" id="confirmPassword" placeholder="Confirm Password">
        <input type="submit" id="createAccount" value="Create Account">
      </form>
    </template>
    

    javascript代码:

    if (Meteor.isClient) {
      Template.loginPage.events({
        'submit form': function(event, template) {
            event.preventDefault();
            console.log('creating account');
            var passwordVar = template.find('#password').value;
            var confirmVar = template.find('#confirmPassword').value;
            if (passwordVar === confirmVar) {
                Accounts.createUser({
                    email: template.find('#email').value,
                    password: passwordVar,
                    // you can add wherever fields you want to profile
                    // you should run some validation on values first though
                    profile: {
                      firstName: template.find('#firstName').value,
                      lastName: template.find('#lastName').value
                    }
                });
            }
        }
      });
      // make sure to have a logout button
      Template.userPage.events({
        'click #logout': function(event, template) {
          Meteor.logout();
        }
      });
    }
    
    if (Meteor.isServer) {
      Meteor.startup(function () {
        // code to run on server at startup
      });
    }
    

    【讨论】:

    • 这个很清楚,非常感谢sharkbyte!
    【解决方案3】:

    在服务器端,您可以挂钩 Accounts.onCreateUser 挂钩并捕获其他字段。

    if (Meteor.isServer) {
        Meteor.startup(function() {
        });
    
        Accounts.onCreateUser(function(options, user) {
            if (options.profile) {
                user.profile = options.profile;
            }
    
            user.profile.address = 
            user.profile.city = 
            user.profile.state = 
            user.profile.zip =
            user.profile.anything = 
        return user;
    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-13
      • 2011-10-23
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2017-03-08
      相关资源
      最近更新 更多