Bạn có thể sử dụng Deps.autorun để thiết lập một handler tùy chỉnh quan sát Meteor.userId() thay đổi biến phản ứng.
Meteor.userId() (và Meteor.user()) là các biến phản ứng trả về tương ứng với userId hiện tại đã đăng nhập (null nếu không) và tài liệu người dùng tương ứng (bản ghi) trong bộ sưu tập Meteor.users.
Do đó, người dùng có thể theo dõi việc đăng nhập/đăng xuất khỏi ứng dụng Meteor bằng cách phản ứng với việc sửa đổi các nguồn dữ liệu phản ứng đó.
client/main.js:
var lastUser=null;
Meteor.startup(function(){
Deps.autorun(function(){
var userId=Meteor.userId();
if(userId){
console.log(userId+" connected");
// do something with Meteor.user()
}
else if(lastUser){
console.log(lastUser._id+" disconnected");
// can't use Meteor.user() anymore
// do something with lastUser (read-only !)
Meteor.call("userDisconnected",lastUser._id);
}
lastUser=Meteor.user();
});
});
Trong mẫu mã này, tôi đang thiết lập một tập tin nguồn biến cục bộ (lastUser) để theo dõi người sử dụng cuối cùng đã được ghi lại trong ứng dụng. Sau đó, trong Meteor.startup, tôi sử dụng Deps.autorun để thiết lập một ngữ cảnh phản hồi (mã sẽ được thực thi lại bất cứ khi nào một trong các nguồn dữ liệu phản ứng được truy cập được sửa đổi). Ngữ cảnh phản ứng này theo dõi biến thể Meteor.userId() và phản ứng tương ứng.
Trong mã kết nối, bạn không thể sử dụng Meteor.user() nhưng nếu bạn muốn truy cập tài liệu người dùng cuối cùng, bạn có thể sử dụng biến lastUser. Bạn có thể gọi phương thức máy chủ với lastUser._id làm đối số nếu bạn muốn sửa đổi tài liệu sau khi đăng xuất.
máy chủ/server.js
Meteor.methods({
userDisconnected:function(userId){
check(userId,String);
var user=Meteor.users.findOne(userId);
// do something with user (read-write)
}
});
Hãy nhận biết rằng mặc dù khách hàng độc hại có thể gọi phương thức phục vụ này với bất cứ ai userId, vì vậy bạn không nên làm bất cứ điều gì quan trọng trừ khi bạn thiết lập một số mã xác minh.
Có lẽ đây trả lời câu hỏi của bạn: http://stackoverflow.com/questions/10257958/server-cleanup-after-a-client-disconnects –
Đó là rất gần, nhưng tôi làm muốn chắc chắn rằng nó chỉ khi họ tích cực đăng xuất không may. –
điều này có thể giúp: http://stackoverflow.com/questions/22900405/how-to-redirect-after-user-has-just-logged-in-or-just-logged-out?answertab=votes#tab-top – dm76