Ответ 1
Вы должны использовать 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 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
, он проверяет, вошел ли пользователь в систему и выполнит ли что-то, что вам нужно, когда он войдет в систему. Первоначально существует перенаправление для ретрансляции данных из localstorage обратно в URI.