2013-05-18 63 views
0

我在同一臺服務器上有一個php/apache服務和流星。我正在使用accounts-ui軟件包。 是否有無論如何知道在我的PHP腳本,用戶登錄,鑑於登錄令牌(會話ID?)如何知道用戶是否從另一個服務登錄

這是我的原始需要:上傳一個用戶登錄的個人資料圖片。 非常簡單的權利?但經過幾個小時的谷歌搜索,我還沒有找到答案。

  • 首先解決辦法是使用HTML5 File API可將數據發送到流星服務器和服務器保存圖像。但是這個解決方案甚至不適用於IE9。

  • 第二種解決方案是我想要的:使用html表單將圖片上傳到php腳本(或任何腳本,如果需要,它可以是nodejs腳本)。該腳本將像傳統的PHP腳本一樣保存圖像。事情是我不知道上傳請求是否被授權,否則每個人都可以更改任何人的個人資料圖片。我必須在上傳請求中添加一些信息,並在保存圖像之前在php代碼中驗證它們。我正在考慮從php腳本向流星服務器發送請求,但我需要知道要發送哪些參數以及流星如何響應。

我如何能實現第二個解決方案,或者如果有人有我的起源問題的另一個解決方案將是巨大的。

謝謝。

回答

1

流星使用稱爲DDP的協議在客戶端和服務器之間進行通信。但是到目前爲止,還沒有一個PHP的ddp客戶端,所以你將不得不在你的流星服務器和你的PHP服務器之間使用REST類型的通信方法。

如果你覺得你可以建立一個PHP客戶端爲您的流星客戶端,這將極大地幫助你,你可以從你的PHP腳本做的東西一樣運行Meteor.call,並讓他們訂閱的集合。完整的DDP規範(pre1)可在以下網址找到:https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md

要執行REST方法,您應該使用Meteor Router以允許您創建服務器端路由。它通過meteorite安裝,它可以幫助您訪問[atmosphere.meteor.com]上的社區軟件包列表。 1

服務器端JS

Meteor.Router.add('/checklogin', 'post', function() { 
    var userId = this.params.userId; 
    var loginToken = this.params.loginToken; 

    if(userId && loginToken) { 
     return (!!Meteor.findOne({_id:userId,"services.resume.loginTokens.token":loginToken})); 
    } 
}); 

然後可以做PHP POST請求/checklogin與兩個參數,一個是用戶id其爲用戶ID(與Meteor.userId()localStorage.getItem("Meteor.userId")找到。另一種是通過流星客戶端上的localStorage.getItem("Meteor.loginToken")發現登錄令牌。

相關問題