方法 returns 在客户端未定义
Method returns undefined on client
我能够在服务器上生成随机数并显示在控制台上,但该值没有返回给客户端。
服务器方法:
Meteor.methods({
'user.generateNewLoginAttempt': function(user_address) {
let exists = Meteor.users.findOne({
username: user_address
});
let nonce = Random.secret(16);
console.log(nonce); //shows random string
if (exists) {
// user already exists, update nonce
Meteor.users.update(exists._id, {
$set: {
nonce: nonce
}
});
} else {
// create new user
let userId = Accounts.createUser({
username: user_address,
address: user_address,
nonce: nonce
});
}
return nonce;
},
});
客户代码:
Meteor.call('user.generateNewLoginAttempt', user_address, function(err, nonce) {
if (err)
console.log(err);
/shows up internal server error
// nonce = the nonce generated on server
else {
console.log('nonce: ' + nonce);
// hash nonce
let sh3_nonce = web3.sha3(nonce); // depending on web3 version use: web3.utils.sha3(nonce)
console.log('sh3 hashed nonce: ' + sh3_nonce);
// sign hashed nonce
web3.eth.sign(user_address, sh3_nonce, function(err, res) {
if (err) {
console.log(err);
} else {
// res = the signed nonce
// login with signed nonce
login(res);
}
});
}
});
在客户端显示Internal Server Error(500)
。我尝试从服务器方法中删除大部分代码并只返回一些值,但这也不起作用。
我认为你不能像那样在用户文档上设置随机数和地址,我记得 Accounts.createUser 只使用用户名、密码、电子邮件和个人资料,所以如果你想保存您需要将随机数和用户对象上的地址插入到 "profile" 对象中。
记住!不鼓励使用配置文件来保留用户数据,因为默认的流星行为是允许用户编辑配置文件,所以如果你这样做,你需要确保您自己设置了 allow/deny 政策。
在我看来,将用户详细信息保存在单独的集合中会更好。
我能够在服务器上生成随机数并显示在控制台上,但该值没有返回给客户端。
服务器方法:
Meteor.methods({
'user.generateNewLoginAttempt': function(user_address) {
let exists = Meteor.users.findOne({
username: user_address
});
let nonce = Random.secret(16);
console.log(nonce); //shows random string
if (exists) {
// user already exists, update nonce
Meteor.users.update(exists._id, {
$set: {
nonce: nonce
}
});
} else {
// create new user
let userId = Accounts.createUser({
username: user_address,
address: user_address,
nonce: nonce
});
}
return nonce;
},
});
客户代码:
Meteor.call('user.generateNewLoginAttempt', user_address, function(err, nonce) {
if (err)
console.log(err);
/shows up internal server error
// nonce = the nonce generated on server
else {
console.log('nonce: ' + nonce);
// hash nonce
let sh3_nonce = web3.sha3(nonce); // depending on web3 version use: web3.utils.sha3(nonce)
console.log('sh3 hashed nonce: ' + sh3_nonce);
// sign hashed nonce
web3.eth.sign(user_address, sh3_nonce, function(err, res) {
if (err) {
console.log(err);
} else {
// res = the signed nonce
// login with signed nonce
login(res);
}
});
}
});
在客户端显示Internal Server Error(500)
。我尝试从服务器方法中删除大部分代码并只返回一些值,但这也不起作用。
我认为你不能像那样在用户文档上设置随机数和地址,我记得 Accounts.createUser 只使用用户名、密码、电子邮件和个人资料,所以如果你想保存您需要将随机数和用户对象上的地址插入到 "profile" 对象中。
记住!不鼓励使用配置文件来保留用户数据,因为默认的流星行为是允许用户编辑配置文件,所以如果你这样做,你需要确保您自己设置了 allow/deny 政策。
在我看来,将用户详细信息保存在单独的集合中会更好。