您必须在客户端发出请求的地方使用 Meteor.user()(例如 Meteor.methods 或 Meteor.publish)。
它不能放在其他任何地方,因为流星在那个时候不会知道用户应该绑定到的代码。如果有一个地方从客户端发出某种形式的请求,它可以这样做:
在 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将Meteor 路由器安装为一个包,以允许您拥有服务器渲染页面。(通过安装)mrt install router
然后,服务器端路由可以处理 Web 请求:
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
它时,它会检查用户是否登录并在他们登录时做你想做的事情。最初有一个重定向将数据从 localstorage 中继回 URI。