javascript - Meteor.js facebook 使用 'apple-mobile-web-app-capable' 登录

标签 javascript facebook meteor

我正在做一个小型个人项目,用户可以通过 {{loginButtons}} 中内置的 Meteor.js 登录 Facebook 但问题是,当通过 apple-mobile-web-app-capable 全屏运行应用程序时,没有弹出对话框请求许可。屏幕一片空白。

我根本没有使用 facebook 的 sdk。

它在移动 safari 中运行良好。我已将它部署到 meteor 进行一些最终测试,所以这不是本地主机问题。

这是否可能而不必创建我自己的用户创建和/或服务器端实现和/或 facebook 的 sdk? 最终我计划添加更多内容,例如 twitter 和 google。

此外,我还在使用 iOS 6.1

最佳答案

更新,请参阅我的其他答案以获得改进的示例

所以我只花了大约一个小时来解决一些问题。 我认为最好的办法是放弃 Meteor 的内置帐户系统 相反,我正在使用“oauth.io”(无从属关系)和“ meteor 路由器”,我将使用 Meteor 的 Accounts.createUser(); 创建用户; 最好的部分是它可以与本地主机和我的 iPhone 一起使用,所以我不必继续部署它来测试。

Meteor.startup(function () {
    OAuth.initialize('my key');
});

我的路线:

Meteor.Router.add({
    '/oauth': function() {
      console.log('oauthed');
        OAuth.callback('facebook', function(err, result) {
            var token = result.access_token;
            var url = 'https://graph.facebook.com/me?access_token='+token;

            $.get( url, function( data ) {
                alert(data.email)
                console.log(data);
            });
        });
    }
});

然后是一个简单的 anchor

$('#loginfb').live('click', function() {
    OAuth.redirect('facebook', "/oauth");
});

就我所知,它适用于 apple-mobile-web-app-capable 我能够验证并获取我的 Facebook 信息。 它比我想做的要多,但并不太难。

所以我在考虑做一些事情,比如用这种方法获取用户的电子邮件,然后使用:

Accounts.createUser({
    email: data.email, 
    password: data.id //since your Facebook id can't change
});

这样用户可以稍后更改或重置它,或者我可以提示他们更改它。

然后我要检查该用户是否存在,(不知道如何做)如果他们存在则做:

Meteor.loginWithPassword(data.email, data.id);

好的。所以我稍微调整了我的设置。

我不得不切换到 Backbone Router,出于某种原因,Meteor Router 每次加载/oauth 时都会刷新页面两次。 Backbone 没有。

我添加了一个用于生成密码的服务器端函数。

Meteor.startup(function () {
  Backbone.history.start({
      pushState: true,
      root: "/"
  });

  OAuth.initialize('key goes here');
});

var $Router = Backbone.Router.extend({
  routes: {
    "/": "home",
    "oauth": "oauth",
    "": "home"
  },
  home: function () {
    console.log('home')
  },
  oauth: function () {
    OAuth.callback('facebook', function (err, result) {
      console.log(result);
      var token = result.access_token;
      var url = 'https://graph.facebook.com/me?access_token=' + token;
      $.get(url, function (data) {
        var email = data.email;
        var pass = Meteor.call('generatePass', data, function (error, result) {
          Meteor.loginWithPassword(email, result, function (error) {
            if (error) {
              var options = {};
              options.email = email;
              options.password = pass;
              Accounts.createUser(options, function (error) {
                if (error) {
                  console.log(error);
                  $router.navigate('/');
                } else {
                  //Account creation successful return to index
                  $router.navigate('/');
                }
              })
            } else {
              //Login successful return to index
              $router.navigate('/');
            }
          });
        });
      });
      return false;
    });
  }
});

var $router = new $Router();
// I use jquery for events, I don't like to use meteor's template event handlers.

$('#loginfb').click(function (event) {
  event.preventDefault();
  //have to use redirect, otherwise popup won't work correctly since we're using mobile-webapp-capable
  OAuth.redirect('facebook', "/oauth");
});


//server.js
Meteor.methods({
  generatePass: function (data) {
    // .. do stuff ..
    var pass = fancy function that creates a password based on the supplied data;
    return pass;
  }
});

到目前为止,它只适用于 Facebook,而且还没有经过很好的测试。 我喜欢一些指导和/或建设性的批评。

关于javascript - Meteor.js facebook 使用 'apple-mobile-web-app-capable' 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19802733/

相关文章:

facebook - Flutter中Facebook登录按钮的实现

javascript - Web Audio API 故障/失真问题

javascript - 将参数传递给 lodash.throttle 的回调

javascript - 使用 Node.js 和 Express 创建 HTTPs 服务器

image - meteor 图像,CSS, "Normal"Web 服务

javascript - 如何通过点击输入按钮来触发函数

javascript - React + Meteor : this. Prop 返回未定义

javascript - HTML 中 script 元素的 charset 属性的用途是什么?

javascript - 在 Facebook 上使用 JavaScript

android - Ionic With Facebook connect on Android Device - probleme return url?