0

我在同一台服务器上有一个 php/apache 服务和流星。我正在使用accounts-ui 包。无论如何,在我的 php 脚本中是否知道用户已登录,给定登录令牌(会话 ID?)

这是我最初的需求:为登录用户上传个人资料图片。很简单吧?但是经过几个小时的谷歌搜索,我还没有找到答案。

  • 第一个解决方案是使用 html5 File apis 将数据发送到流星服务器,然后服务器保存图像。但是这个解决方案甚至不适用于 IE9。

  • 第二个解决方案是我正在尝试的:使用 html 表单将图片上传到 php 脚本(或任何脚本,如果需要,它可以是 nodejs 脚本)。该脚本将像传统的 php 脚本一样保存图像。问题是我不知道上传请求是否被授权,否则每个人都可以更改任何人的头像。我必须在上传请求中添加一些信息,并在保存图像之前在 php 代码中验证它们。我正在考虑从 php 脚本向流星服务器发送请求,但我需要知道要发送哪些参数以及流星如何响应它。

我怎样才能实现第二个解决方案,或者如果有人对我的起源问题有另一种解决方案,那就太好了。

谢谢你。

4

1 回答 1

1

Meteor 使用称为 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来允许您创建服务器端路由。它是通过陨石安装的,它可以帮助您访问 [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()or找到。另一个是通过Meteor 客户端localStorage.getItem("Meteor.userId")找到的登录令牌。localStorage.getItem("Meteor.loginToken")

于 2013-05-18T15:26:37.183 回答