【问题标题】:How can I create users server side in Meteor?如何在 Meteor 中创建用户服务器端?
【发布时间】:2016-10-28 20:33:20
【问题描述】:

在新的 Meteor auth 分支中,如何在服务器端创建用户?

我知道如何通过调用来创建它们的客户端

[Client] Meteor.createUser(options, extra, callback)

但是假设我想在启动时创建一个 Meteor 用户集合记录?

例如,应用程序启动/引导期间的管理员帐户?

谢谢 史蒂夫

【问题讨论】:

  • 您应该将接受的答案更新为使用 accounts.createuser 的答案

标签: meteor


【解决方案1】:

在新版本的流星上使用

  Accounts.createUser({
                            username: username,
                            email : email,
                            password : password,
                            profile  : {
                                //publicly visible fields like firstname goes here
                            }

    });

注意:密码哈希是自动生成的

在使用旧版本的流星时:

1 - 注意:您是否安装了所需的软件包

  • mrt 添加帐户库
  • mrt 添加账户密码

在某些版本的流星上,你不能像 Steeve 建议的那样调用 SRP 密码盐生成器,所以试试这个:

2 - 执行 Meteor.users.insert()

例如

 var newUserId = 
 Meteor.users.insert({
         emails: ['peter@jones.com'],
         profile  : { fullname : 'peter' }
 });

注意:用户必须拥有用户名或电子邮件地址。我在这个例子中使用了电子邮件。

3 - 最后为新创建的帐户设置密码。

Accounts.setPassword(newUserId, 'newPassword');

【讨论】:

  • +1 用于提及帐户密码。我试图在没有这个包的情况下使用 Accounts.createUser,但它不起作用!
【解决方案2】:

现在可能这是一个众所周知的事实,但为了完成这一点 - 在auth 分支上有一个新的服务器 API 用于执行此操作。来自docs on auth

" [Server] Meteor.createUser(options, extra) - 创建一个用户并且 向该用户发送一封电子邮件,其中包含选择其初始密码的链接 并完成他们的帐户注册

options 包含:电子邮件(强制)、用户名(可选)的哈希 extra:用户对象的额外字段(例如名称等)。 "

请注意,API 可能会发生变化,因为它还没有在 master 分支上。

【讨论】:

【解决方案3】:

目前这已在meteor-core google 小组中提出。

Meteor.users.insert({username: 'foo', emails: ['bar@example.com'], name: 'baz', services:     {password: {srp: Meteor._srp.generateVerifier('password')}}});

它有效。我在启动/引导期间对其进行了测试。

我不会认为这是永久或长期的答案,因为我相信 auth 分支仍处于很大的变化中,我想 Meteor 背后的团队将为它提供某种功能。

因此,不要将其作为长期答案。

史蒂夫

【讨论】:

    【解决方案4】:

    目前,我相信你不能。跑步

    Meteor.call('createUser', {username: "foo", password: "bar"});
    

    接近了,但是passwords_server.js 中的createUser 的实现在成功时调用this.setUserId,并且setUserId 不能在服务器上调用,除非我们在客户端启动的方法调用中(搜索“Can在livedata_server.js 中,'不要在服务器启动的方法调用上调用 setUserId。

    这看起来确实值得支持。也许createUser 的最后三行(用户登录)应该由该方法的新布尔login 选项控制?然后你可以使用

    Meteor.call('createUser', {username: "foo", password: "bar", login: false});
    

    在服务器引导代码中。

    【讨论】:

      【解决方案5】:

      我已确认我的 server/seeds.js 文件中的以下代码适用于最新版本的 Meteor(发布 0.8.1.1)

      if (Meteor.users.find().count() === 0) {
        seedUserId = Accounts.createUser({
          email: 'f@oo.com',
          password: '123456'
        });
      }
      

      server 的目录(或文件夹)表示我正在服务器上运行代码。文件名seeds.js 完全是任意的。

      official documentation 现在描述了Accounts.createUser() 在客户端和服务器上运行时的行为。

      【讨论】:

        【解决方案6】:

        从服务器端创建用户

            // Server method
            Meteor.methods({
              register: function(data) {
               try {
                 console.log("Register User");
                 console.log(data);
                 user = Accounts.createUser({
                   username: data.email,
                   email: data.email,
                   password: data.password,
                   profile: {
                     name: data.email,
                     createdOn: new Date(),
                     IsInternal: 0
                   }
                 });
                 return {
                   "userId": user
                 };
               } catch (e) {
                 // IF ALREADY EXSIST THROW EXPECTION 403
                 throw e;
               }
             }
            });
            // Client call method
            Meteor.call('register',{email: "vxxxxx@xxxx.com",password: "123456"}, function(error, result){
              if(result){
               console.log(result)
              }
              if(error){
               console.log(result)
              }
            });
        

        【讨论】:

          【解决方案7】:

          Meteor 版本 1.1.0.2(服务器端)的工作咖啡脚本示例:

          userId = Accounts.createUser  
              username: 'user'
              email: 'user@company.com'
              password: 'password'
              profile:
                name: 'user name' 
          user = Meteor.users.findOne userId 
          

          在将profiles.name 添加到options 之前,我一直在努力解决这个API 在工作代码中出现“用户已存在”异常的问题,然后异常消失了。

          参考:Accounts.createUser(options,[callback])

          【讨论】:

            猜你喜欢
            • 2015-10-29
            • 1970-01-01
            • 1970-01-01
            • 2021-06-23
            • 2016-07-07
            • 1970-01-01
            • 2015-03-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多