Mongodb 在服务器端手动添加用户并设置其会话

Mongodb 在服务器端手动添加用户并设置其会话,mongodb,meteor,account,user-accounts,Mongodb,Meteor,Account,User Accounts,我似乎无法理解Accounts.createUser()和Accounts.onCreateUser()之间的关系。我有一个验证用户登录凭据的外部api。一旦api向我发送了肯定响应,我需要在MongoDB中添加用户并启动其会话,这样它就可以被视为一个登录的用户。Accounts.createUser()正在服务器端创建用户,但我需要Accounts.onCreateUser(),因为我需要添加自定义字段,如从外部api生成的用户令牌 这是我现在拥有的代码(根本不添加用户): 服务器端代码: v

我似乎无法理解Accounts.createUser()和Accounts.onCreateUser()之间的关系。我有一个验证用户登录凭据的外部api。一旦api向我发送了肯定响应,我需要在MongoDB中添加用户并启动其会话,这样它就可以被视为一个登录的用户。Accounts.createUser()正在服务器端创建用户,但我需要Accounts.onCreateUser(),因为我需要添加自定义字段,如从外部api生成的用户令牌

这是我现在拥有的代码(根本不添加用户):

服务器端代码:

var request = {
'headers': {
  'Content-Type': 'application/x-www-form-urlencoded'
},
'params': user
};

try {

var response = HTTP.call('POST', url, request); //send call to the external api
var token = response.data.token;
//decode the token and add the user in the database
var userInfo = Base64.decode(token.split('.')[1]);

var options = {
  email: user._username,
  profile: {
    name: user._username
  },
  token: token
};

var user = Accounts.onCreateUser(function(options, user) {
   if (options.token)
       user.token = options.token;
   if (options.profile)
       user.profile = options.profile;
   return user;
 });

console.log(user); //this returns undefined
return JSON.stringify({
  'code': 200,
  'token': userInfo
});
} catch (error) {
  console.log(error);
//console.log(error.response);
var body = error.response.content;
return body;
}

好的。所以我终于找到了我一直在寻找的东西。Accounts.createUser和Accounts.onCreateUser之间的关系是Accounts.onCreateUser是一个钩子,它将扩展功能添加到原始Accounts.createUser函数中。什么是扩展功能?它允许您在实际将用户插入数据库之前创建其他字段。您必须在启动代码段的main.js(服务器端)中编写此钩子:

Meteor.startup(() => {
 Accounts.onCreateUser(function(options, user) {
if (options.token)
    user.token = options.token;
if (options.profile)
    user.profile = options.profile;
return user;
 });
})
无论您想在哪里添加用户,只需调用Accounts.createUser(),这个钩子就会在createUser调用之前自动调用