1

我想强制用户启用他们的地理位置,否则不允许登录到流星站点。

我在名为“login”的车把模板中使用 accounts-ui 和 {{loginButtons}}。

login.html
<template name="login">
  {{loginButtons}}
</template>

login.js
Template.login.rendered = function() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(success, error);
  } else {
    Meteor.logout();
  }
}

我收到地理定位提示(使用 chrome),但是当我单击拒绝时,它仍然让我登录。在使用该站点之前检查流星启动时的地理定位会更好吗?理想情况下,我正在寻找一种在 Meteor.isLoggingIn() 时检查地理位置的方法。

4

1 回答 1

0

最好的办法是完全避免显示登录按钮,除非有地理编码。

登录.html

<template name="login">
  {{#if showLogin}}
    {{loginButtons}}
  {{/if}}
</template>

登录.js

Template.login.helpers({
  showLogin: function () {
    successCallback = function (loc) { Session.set('curLocation', loc);}
    errorCallback = function (err) { 
      Session.set('curLocation', null);
      if (Meteor.userId()) {
        Meteor.logout();
      }
    }

    // This just checks to see if the browser supports geolocation. 
    if (navigator.geolocation){
      // Actually checks for geocode.
      navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
    }

    // Tricky bit:  Reactive variable changes (and reruns) when callback changes.
    //              Since the variable is only set on success, this function will 
    //              only ever be true on a success.
    return Session.get('curLocation');
  }
});
于 2015-08-25T09:02:24.280 回答