gpt4 book ai didi

meteor - 如何让 Meteor.user() 在服务器端返回?

转载 作者:行者123 更新时间:2023-12-03 07:39:57 25 4
gpt4 key购买 nike

在名为/server/main.js 的文件中(以确保它最后加载)。

console.dir(Meteor.user());

抛出:

Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.

所以我尝试在同一个文件中使用:

console.dir(this.userId);

返回:

undefined

所以,不要放弃,我在想“没关系,我只需从 header 中的 cookie 中读取即可”:

var connect = Npm.require('connect');

__meteor_bootstrap__.app.use(connect.query()).use(function(req, res, next) {
console.dir(req.headers);
next();
});

.... 除了 'cookie: 'uvf=1'' 之外,不返回任何 cookie 内容

我不知道该得出什么结论 - 这是毫无意义的,因为我可以很好地使用 Meteor.Account 框架,读取/设置用户属性等。服务器清楚地了解用户,并且当前用户清楚已登录。

我完全不知所措,任何解释/提示/指针将不胜感激。

最佳答案

您必须在客户端发出请求的地方(例如 Meteor.methods 或 Meteor.publish)使用 Meteor.user()。

它不能放在其他任何地方,因为在用户应该绑定(bind)的代码中,meteor 不知道此时的情况。如果客户端发出某种形式的请求,它可以执行以下操作:

在 Meteor.publish 中:

Meteor.publish("collection", function() {
//returns undefined if not logged in so check if logged in first
if(this.userId) {
var user = Meteor.users.findOne(this.userId);
//var user is the same info as would be given in Meteor.user();
}
});

在 Meteor.methods 中:

Meteor.methods({
"test":function() {
//should print the user details if logged in, undefined otherwise.
console.log(Meteor.user());
}
}

在服务器端路由上使用 Meteor.user():

您需要Meteor router通过 meteorite 作为软件包安装允许您拥有服务器呈现的页面。 (通过mrt install router安装)

服务器端路由可以处理网络请求:

 Meteor.Router.add('/awebpage', function(id) {
var userId = this.params.userid;
var logintoken = this.params.logintoken;
var isdirect = this.param.direct;
var user = Meteor.users.findOne({_id:userId,"services.resume.loginTokens.token":logintoken});
if(user) {
//the user is successfully logged in

return "You, "+user.profile.name+", are logged in!";
}
else
{
if(isdirect) {
return "<h3>Loading</h3><script>window.location.href="/awebpage?direct=true&userid="+localStorage.getItem("Meteor.userId") +"&logintoken="+localStorage.getItem("Meteor.loginToken")</script>";
}
else
{
return "Not logged in"
}
}
});

现在,当您访问 /awebpage 时,它会检查用户是否已登录,并在登录时执行您想要的操作。最初有一个重定向,用于将本地存储中的数据转发回来到 URI。

关于meteor - 如何让 Meteor.user() 在服务器端返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com