如何知道用户是否从其他服务登录

时间:2013-05-18 13:34:54

标签: authentication meteor

我在同一台服务器上有一个php / apache服务和meteor。我正在使用accounts-ui包。 在我的PHP脚本中,是否有用户登录,给定登录令牌(会话ID?)

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

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

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

如何实现第二种解决方案,或者如果有人为我的原始问题提供另一种解决方案,那就太棒了。

谢谢。

1 个答案:

答案 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")找到。