我正在使用该accounts-ui
软件包,并希望在用户登录/和或注册后立即处理一些 javascript。
用户登录后是否有事件被调用?
原始登录 API(例如loginWithFacebook
,loginWithPassword
等)有一个在登录完成时触发的回调,但目前没有通过accounts-ui
. 这可能会改变。
一种潜在的解决方法,受 Werner 建议的启发,但也考虑了页面加载:
var oldUserId = undefined;
Meteor.autorun(function() {
var newUserId = Meteor.userId();
if (oldUserId === null && newUserId) {
console.log('The user logged in');
} else if (newUserId === null && oldUserId) {
console.log('The user logged out');
}
oldUserId = Meteor.userId();
});
您可以检查Meteor.userId()
内部函数的结果Meteor.autorun():
Meteor.autorun(function() {
if (Meteor.userId()) {
console.log('The user logged in');
}
});
只是提供一个替代方案;我猴子修补了回调函数。它看起来有点复杂,因为 credentialRequestCompleteHandler 需要一个返回函数的函数,但除此之外它是一个普通的猴子补丁。将其粘贴在 main.js 或某些处理较晚且仅处理一次的内容中。希望对以后的参考有所帮助。
var orgCallback = Accounts.oauth.credentialRequestCompleteHandler;
Accounts.oauth.credentialRequestCompleteHandler = function(callback){
return function (credentialTokenOrError) {
var tmpFunc = orgCallback(callback);
tmpFunc(credentialTokenOrError);
alert("do your own thing here");
}
}