/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
だから、あきらめずに、「ヘッダーの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()を使用する必要があります。
流星は、ユーザーがバインドされることになっているコードのその時点ではわからないため、他の場所に配置することはできません。クライアントから何らかの形式のリクエストが行われる場所がある場合、これを行うことができます:
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
経由でインストール)
サーバー側のルートは、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にデータをリレーするリダイレクトがあります。
Meteor.publish()でuserIdをグローバルスコープに公開できます。その後、Meteor.Routerのサーバー側ルートで使用できます。
-
/server/publications.js
CurrentUserId = null;
Meteor.publish(null, function() {
CurrentUserId = this.userId;
});
-
/server/routes.js
Meteor.Router.add('/upload', 'POST', function() {
if (!CurrentUserId)
return [403, 'Forbidden'];
// proceed with upload...
});
ログインしたコールバックを使用できます
Accounts.onLogin((obj)->
user = ob.user
)
Accounts.onLogin(function(obj){
var user = ob.user
})