如何使用 ian:accounts-ui-bootstrap-3 根据 Meteor 中的用户输入设置配置文件字段值?
How to set a profile field value based on user input in Meteor using ian:accounts-ui-bootstrap-3?
我正在使用 ian:accounts-ui-bootstrap-3
在我的 Meteor 应用程序中创建帐户。在该应用程序中,我使用的是稍微自定义的版本,其中用户声明 his/her 用户名和性别。
Accounts.ui.config({
requestPermissions: {},
extraSignupFields: [{
fieldName: 'username',
fieldLabel: 'Username',
inputType: 'text',
visible: true,
validate: function(value, errorFunction) {
if (!value) {
errorFunction("Please write your username");
return false;
} else {
return true;
}
}
}, {
fieldName: 'gender',
showFieldLabel: false, // If true, fieldLabel will be shown before radio group
fieldLabel: 'Gender',
inputType: 'radio',
radioLayout: 'vertical', // It can be 'inline' or 'vertical'
data: [{ // Array of radio options, all properties are required
id: 1, // id suffix of the radio element
label: 'Male', // label for the radio element
value: 'm' // value of the radio element, this will be saved.
}, {
id: 2,
label: 'Female',
value: 'f',
checked: 'checked'
}],
visible: true
}, ]
});
这很好用,我得到了一个用户,其数据(略有删节)如下所示:
{
"username" : "testuser",
"emails" : [
{
"address" : "test@test.com",
"verified" : false
}
],
"profile" : {
"username" : "testuser",
"gender" : "f"
}
}
现在我想使用 "gender" 值将名为 "avatar" 的新字段设置为 "generic-male.png" 或 "generic-female.png"。在post 中建议使用Accounts。 onCreateUser 机制。所以我写了这个,并把它放在服务器目录中的main.js文件中:
Accounts.onCreateUser(function(user){
if (user.gender=='m') {
user.avatar = "generic-male.png"
} else {
user.avatar = "generic-female.png"
}
})
但这会产生以下错误:
Exception while invoking method 'createUser' Error: insert requires an argument
我想这是因为用户参数没有传递给 onCreateUser 方法。但是应该怎么做呢?
您需要 return user
在您的 accountsServer.onCreateUser(func)
函数中:
The function should return the user document (either the one passed in
or a newly-created object) with whatever modifications are desired.
The returned document is inserted directly into the Meteor.users
collection.
例如:
Accounts.onCreateUser(function(user){
if (user.gender === 'm') user.avatar = "generic-male.png";
else user.avatar = "generic-female.png";
return user;
});
我正在使用 ian:accounts-ui-bootstrap-3
在我的 Meteor 应用程序中创建帐户。在该应用程序中,我使用的是稍微自定义的版本,其中用户声明 his/her 用户名和性别。
Accounts.ui.config({
requestPermissions: {},
extraSignupFields: [{
fieldName: 'username',
fieldLabel: 'Username',
inputType: 'text',
visible: true,
validate: function(value, errorFunction) {
if (!value) {
errorFunction("Please write your username");
return false;
} else {
return true;
}
}
}, {
fieldName: 'gender',
showFieldLabel: false, // If true, fieldLabel will be shown before radio group
fieldLabel: 'Gender',
inputType: 'radio',
radioLayout: 'vertical', // It can be 'inline' or 'vertical'
data: [{ // Array of radio options, all properties are required
id: 1, // id suffix of the radio element
label: 'Male', // label for the radio element
value: 'm' // value of the radio element, this will be saved.
}, {
id: 2,
label: 'Female',
value: 'f',
checked: 'checked'
}],
visible: true
}, ]
});
这很好用,我得到了一个用户,其数据(略有删节)如下所示:
{
"username" : "testuser",
"emails" : [
{
"address" : "test@test.com",
"verified" : false
}
],
"profile" : {
"username" : "testuser",
"gender" : "f"
}
}
现在我想使用 "gender" 值将名为 "avatar" 的新字段设置为 "generic-male.png" 或 "generic-female.png"。在post 中建议使用Accounts。 onCreateUser 机制。所以我写了这个,并把它放在服务器目录中的main.js文件中:
Accounts.onCreateUser(function(user){
if (user.gender=='m') {
user.avatar = "generic-male.png"
} else {
user.avatar = "generic-female.png"
}
})
但这会产生以下错误:
Exception while invoking method 'createUser' Error: insert requires an argument
我想这是因为用户参数没有传递给 onCreateUser 方法。但是应该怎么做呢?
您需要 return user
在您的 accountsServer.onCreateUser(func)
函数中:
The function should return the user document (either the one passed in or a newly-created object) with whatever modifications are desired. The returned document is inserted directly into the Meteor.users collection.
例如:
Accounts.onCreateUser(function(user){
if (user.gender === 'm') user.avatar = "generic-male.png";
else user.avatar = "generic-female.png";
return user;
});