2014-12-18 3 views
2

У меня есть приложение meteor, которое я хочу только на мобильных платформах (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 простой помощник UI возвращения Meteor.isCordova.

Теперь страница выглядит красиво и сладко, но нижестоящая выглядит так: Meteor.loginWithPassword все еще можно вызвать в консоли, а оттуда зарегистрированный пользователь может в основном делать все, что он или она может сделать из мобильного приложения, позвонив на сервер методы. Мои методы сервера проверяют, зарегистрирован ли пользователь, но не могут понять, с какой платформы ... насколько я знаю.

Есть ли способ отключить это? Мое приложение сильно зависит от геолокации пользователей, и я не хочу, чтобы им было слишком легко подделать их позицию. (Я знаю, что притворяется положение также может быть достигнуто на мобильных телефонах, но я должен признать, вещи, если я когда-нибудь хочу, чтобы закончить эту ... вещь)

+1

Открытие консоли - это не то, что вы ожидаете от среднего пользователя. Помните, что независимо от того, что вы делаете, всегда будет возможность злоупотреблять вашим API-интерфейсом сервера. Это просто вопрос, как это будет тяжело. –

+0

Вот почему я предполагаю, что слишком просто/неудобно установить дополнение Firefox, например Geolocater, чем начать укоренение вашего телефона. Такие же приложения, как Snapchat или Tinder, не имеют приложения для браузера. Смартфоны - это более управляемая среда, чем ПК. – SylvainB

ответ

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

Интересный вопрос. Но я предполагаю, что модификаторы пользовательских агентов в браузерах могут подделывать это свойство. Хотелось бы, чтобы было что-то более радикальное, например, «браузер удаленной платформы метеоров» – SylvainB

+0

Вы хотите отключить логин по соображениям безопасности или удобства использования? –

+0

Причины использования. Предположим, что возможность подделать вашу позицию (которая отправляется клиенту на сервер) поражает цель моего приложения. Небезопасность, поскольку на карту поставлена ​​небольшая угроза конфиденциальности, если только я не считаю данные, находящиеся на конфиденциальной основе, лицами, которые не находятся в указанной области данных. – SylvainB

Смежные вопросы