2015-10-31 64 views
0

目前我有兩個應用程序,'Alpha'和'Bravo',拆分以減少代碼大小。然而,現在我需要'Bravo'應用程序調用'Alpha'應用程序(來自客戶端)編寫的Meteor方法,並且需要利用this.userId來提高安全性。但是,如果從'Bravo'應用程序調用,則當前this.userId爲null。如何從流星方法調用中使用`this.userId`?

'Bravo'應用通過複製createUser代碼並共享相同的數據庫來創建用戶。用戶可以登錄到每個應用程序沒有問題。 AlphaDDP = DDP.connect(alpha_server_url)

然而,當在布拉沃的應用程序,如果我叫AlphaDDP.call('updateDoc', docId, newData)
this.userId值打印出空的阿爾法日誌:它也使用連接到阿爾法。我認爲,當我連接DDP.connect它會驗證連接。然而,這似乎並非如此。

谷歌搜索後,我碰到Meteor.call("login")但看來這不會,如果用戶沒有使用電子郵件/密碼登錄工作。

我試圖用新的AccountsClient試驗,但未能取得任何進展。

此外另一個需要注意的是,我需要它與帳戶短信登錄和帳戶需要創建'Bravo'應用程序。

有關如何做到這一點的任何想法?

回答

0

鑑於您希望兩個應用程序共享一些代碼和相同的數據庫,您應該查看基於軟件包的架構。這將允許您將代碼拆分爲包,並選擇性地將相關代碼導入到每個應用程序中。

meteorpatterns.com has a good guide on this approach.

+0

謝謝,但我使用的WebPack組織代碼,並可以與私人NPM模塊共享大部分的通用代碼。我提到了複製'createUser'的功能,但它們在應用程序之間有點不同,但足夠接近以便在解決問題時考慮它們。 – SkinnyG33k

+0

[這是你嗎?](https://forums.meteor.com/t/meteor-webpack-es6-modules-hot-code-patching-fixes-load-order-more/9110)我的意思是試試看。 – JeremyK

+0

無論如何,它聽起來像你需要兩種不同的方式來調用Alpha上的updateDoc。您可能可以將其中的邏輯重構爲服務器上的一個函數(不是Meteor.Method),這由兩個Meteor.Methods調用。當由Alpha的客戶端調用時,在一個Meteor.Method中檢查this.userId,並從Beta中調用第二個Meteor.Method(包裝器),使用不同的身份驗證(簽名請求等)。此外['setUserId'](http://docs.meteor.com/#/full/method_setUserId)函數可能派上用場。 – JeremyK