我的Meteor應用程序中的用戶需要經過驗證的電子郵件地址才能登錄。當用戶更改他的電子郵件地址時,我想在服務器端登錄他併發送新的驗證電子郵件。流星:在服務器端強制用戶註銷
我已經刪除了login.resume.tokens
,但是這並不能殺死用戶會話(他在頁面重新加載時被註銷)。那麼我怎麼能殺死服務器端的用戶會話呢?是否有更多的東西要刪除? 我希望瀏覽器能夠反應性地認識到當前會話已關閉。
我的Meteor應用程序中的用戶需要經過驗證的電子郵件地址才能登錄。當用戶更改他的電子郵件地址時,我想在服務器端登錄他併發送新的驗證電子郵件。流星:在服務器端強制用戶註銷
我已經刪除了login.resume.tokens
,但是這並不能殺死用戶會話(他在頁面重新加載時被註銷)。那麼我怎麼能殺死服務器端的用戶會話呢?是否有更多的東西要刪除? 我希望瀏覽器能夠反應性地認識到當前會話已關閉。
我想你想使用「currentUser」。它是被動的,當令牌在服務器端被刪除時它將返回null。
{{#if currentUser }}
<!-- template here -->
{{/if}}
這似乎沒有記錄,但您是否在服務器上嘗試Accounts.logout()
?看起來像it's implemented。否則,只需在更改後在客戶端上運行Accounts.logout()
。我認爲你的情況是可以接受的。
沒有那個不幸的是不能接受...用戶不應該能夠以這個用戶的名義做任何事情,直到新的電子郵件被驗證。此外,Accounts.logout()方法在服務器上未定義... – ant45de
您可以跟蹤與跟蹤&自動運行,用戶狀態,像這樣:
Tracker.autorun(() => {
if (! Meteor.userId() && ! Meteor.loggingIn()) // do something here;
});
我已經得到了服務器端Meteor.call('logout')
爲我工作。但是,我找不到它的文檔。
而對於客戶端上的無功變量,請嘗試使用Meteor.userId()
在自動運行的內部像Meteor.autorun(function(){...});
。
這不是這種情況,因爲在我刪除服務器上的令牌之後,我的客戶端在全局範圍內仍然有Meteor.user對象,因爲它不爲null,currentUser-helper仍然會返回true ... – ant45de
我剛試了一下,它註銷了我的用戶? (返回null,因此不允許顯示其中的任何模板)我通過將它設置爲null來刪除該標記'db.users.update({「_ id」:「Ym7mk45DMbvSd5ND4」},{$ unset:{'services .resume.loginTokens.0':1}});'然後刪除'db.users.update({「_ id」:「Ym7mk45DMbvSd5ND4」},{$ pull:{'services.resume.loginTokens':null }})' – James
我只是在我的命令窗口中用流星蒙戈完全一樣,而且我沒有直接註銷...只有在重新加載我的瀏覽器之後。你有一個託管的應用程序,你嘗試了它,可能是不同的行爲的原因是什麼? – ant45de