2014-12-18 185 views
2

我有一个流星应用程序,我只想在移动平台(iPhone和Android)上发布,因此,当您输入服务器的地址时,您无法使用该应用程序, ,更确切地说,使用JavaScript控制台的调用方法。但服务器部分仍然必须是功能性的。禁用浏览器平台/在浏览器平台上登录

我想,当你键入服务器URL,我也只是显示一个网页,以目前的应用程序,而不是应用程序本身,所以我与铁路由器拨弄:

Router.configure({ 
    layoutTemplate: 'layout', 
    loadingTemplate: 'loading', 
    notFoundTemplate: 'notFound' 
}); 

if (Meteor.isServer || Meteor.isCordova) { 
    // mobile app routes and behaviors 
} 

在布局模板,我

<template name="layout"> 
    <div class="page-container"> 
    {{#if isCordova}} 
    {{> header}} 
    {{> flashMessages}} 
    <div id="main" class="container"> 
     {{> yield}} 
    </div> 
    {{else}} 
    <!-- Static presentation --> 
    {{/if}} 
    </div> 
</template> 

isCordova是一个简单的用户界面帮手返回Meteor.isCordova:只有当客户端是科尔多瓦屈服。

现在页面看起来不错而且甜蜜,但下面是:Meteor.loginWithPassword仍然可以在控制台内调用,并且从那里注册用户基本上可以通过调用服务器从移动应用程序做任何事情方法。据我所知,我的服务器方法确实检查用户是否登录,但无法从哪个平台找出。

有什么办法可以禁用它吗?我的应用强烈依赖于用户地理位置,我不想让他们太容易让他们错位。 (我知道假装位置也可以在手机上实现,但我得承认的东西,如果我曾经想完成这个事情...)

+1

打开控制台不是您希望普通用户所做的事情。请记住,不管你做什么,总会有一种方法来滥用你的服务器API。这只是一个多么艰难的问题。 – 2014-12-18 23:01:07

+0

这就是为什么我假设它太容易/不愿意安装像Geolocater这样的Firefox插件而不是开始插入你的手机。与Snapchat或Tinder等应用程序相同的原因没有浏览器应用程序。智能手机比PC更受控制的环境。 – SylvainB 2014-12-18 23:07:30

回答

0

您可以使用validateLoginAttempt过滤掉不需要的连接:

Accounts.validateLoginAttempt(function (attempt) { 
    if (!attempt.allowed) { // login failed for some other reason 
    return false; 
    }  
    /* you can now check user agent by accessing 
     attempt.connection.httpHeaders['User-Agent'] 
     and return false if you don't like it 
    */ 
}); 
+1

有趣的问题。但我假设浏览器上的用户代理修饰符可以伪造这个属性。我希望有更激进的东西,比如'meteor remove-platform browser' – SylvainB 2014-12-19 09:24:30

+0

你想禁用登录是出于安全还是可用性的原因? – 2014-12-19 09:33:45

+0

可用性原因。假设能够伪造自己的位置(由客户端发送到服务器)会破坏我的应用程序的用途。不是安全的,因为对于保密问题几乎没有威胁,除非我将位于不属于该数据指定区域的人的数据视为机密数据。 – SylvainB 2014-12-19 09:41:32