我在同一台服务器上有一个php / apache服务和meteor。我正在使用accounts-ui包。 在我的PHP脚本中,是否有用户登录,给定登录令牌(会话ID?)
这是我最初的需求:为登录用户上传个人资料照片。 很简单吧?但经过数小时的谷歌搜索后,我还没有找到答案。
第一个解决方案是使用html5 File apis将数据发送到meteor服务器,服务器保存图像。但是这个解决方案甚至不适用于IE9。
我正在尝试的第二个解决方案:使用html表单将图片上传到php脚本(或任何脚本,如果需要,它可以是nodejs脚本)。这个脚本将像传统的PHP脚本一样保存图像。问题是我不知道上传请求是否被授权,否则每个人都可以更改任何人的个人资料图片。我必须在上传请求中添加一些信息,并在保存图像之前在php代码中验证它们。我正在考虑从php脚本向流星服务器发送请求,但我需要知道要发送哪些参数以及流星如何响应它。
如何实现第二种解决方案,或者如果有人为我的原始问题提供另一种解决方案,那就太棒了。
谢谢。
答案 0 :(得分:1)
Meteor使用一种名为DDP的协议在客户端和服务器之间进行通信。但截至目前,还没有PHP ddp客户端,因此您必须在流星服务器和PHP服务器之间使用REST类型的通信方法。
如果您觉得可以为您的meteor客户端构建一个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向/checklogin
发送一个POST请求,其中包含两个参数,一个是userId,即userId(找到Meteor.userId()
或localStorage.getItem("Meteor.userId")
。另一个是登录令牌通过Meteor客户端上的localStorage.getItem("Meteor.loginToken")
找到。