node.js - 使用带有 ionic 和express 的卫星器

标签 node.js ionic-framework

我有一个 MEAN 堆栈应用程序,它使用 satellizer 进行 FB 登录。

$authProvider.facebook({
        clientId: '1625070294abcdef',
        scope: 'user_friends'
      });

此处没有其他自定义设置。 一旦 FB 身份验证对话框关闭,FB 的响应(即用户数据)就会发送到我的 Express 服务器,以便我可以检索长期 token 。

我的 FB 开发者门户网站 URL 的设置是:

http://localhost:3000

这也是我的 Express 服务器正在监听的地址。

到目前为止一切顺利...一切正常...

现在我也在创建一个 ionic 应用程序..它将使用相同的 Express 后端。

为了执行 FB 登录,我再次使用 sateziller 和 ionic。

satellizer 在 ionic 应用程序中的配置如下:

var commonConfig = {
      popupOptions: {
        location: 'no',
        toolbar: 'no',
        width: window.screen.width,
        height: window.screen.height
      },
     commongConfig: {
       clientId: '1625070294abcdef',
      responseType: 'token',
      redirectUri: 'http://localhost:3000'
     }
    };

问题如下。 在 ionic 应用程序中,FB 身份验证窗口打开。用户进行身份验证..但现在不是关闭窗口..同一个小窗口加载我的 Angular 网站(来 self 之前提到的 MEAN 网站)

这告诉我,在收到来自 FB authen 的 token 后...它被发送到我的 Express 服务器。现在, express 服务器不再将长期 token 发送回我的 ionic 应用程序,而是发送整个 Angular 应用程序。

在 Express 服务器上检索长期 token 的代码如下所示:

var accessTokenUrl = 'https://graph.facebook.com/oauth/access_token';

  var params = {
    'client_id': req.body.clientId,
    'redirect_uri': req.body.redirectUri,
    'client_secret': conf.FACEBOOK_SECRET,
    code: req.body.code
  };
  console.log(params);

  request.get({url: accessTokenUrl, qs: params}, function (err, response, token) {
    if (err) {
      callback(err);
    }
    var accessToken = qs.parse(token);
 ...
 ...
retreive user details from FB using this accessToken (code hidden for sake of clarity
..
..
  res.status(200).send({
    user: user.toJSON(),
    token: token
  });

  });

我相信我在这里犯了一些根本性的错误。

  1. ionic 应用程序归根结底是一个网站(就 Facebook 而言)?

  2. 我应该能够使用相同的 Express 后端来为我的网站和 IONIC 应用程序进行身份验证并提供 REST 服务?

  3. 由于网站(Angular APP)与express服务器由同一台服务器提供服务..它不需要satellizer配置中的redirectUri参数..(默认情况下这是expresss正在监听的URI)?

  4. 由于 ionic 应用程序不会由 Express 服务器提供服务..我们必须在 satellizer 配置中显式指定重定向 URI。 重定向 URI 应该是 Express 正在监听的地址和端口?

最佳答案

有类似的问题,但您可能想查看 ionic.project 文件:

{ "app_id": "", "proxies": [ { path: "/api", "proxyUrl": "http://localhost:3000"} ] }

这样,您就可以将 $authProvider 设置为:

$authProvider.twitter({ url: '/api/user/twitter' });

然后,您在“/user/twitter”处创建一条 Express 路由——当 FB 或 Twitter 等尝试重定向回询问者页面时,它会命中您的 ionic.project 代理并将其直接发送到 Express/Sails/Server,您可以以 GET 的形式捕获该请求,处理它,创建用户等。显然,我的经验是使用 Twitter,但它都是标准化的,所以我认为这对您有用。

希望这会有所帮助!

关于node.js - 使用带有 ionic 和express 的卫星器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157681/

相关文章:

javascript - 如何根据字符串输入更新一个Mongo文档Node.js?

javascript - wait 仅在 async 函数中有效

ionic-framework - 使用文件传输插件下载不工作

javascript - 如何将(Cordova)插件与 Ionic 2/TypeScript 一起使用?

javascript - 使用 $stateProvider 的 AngularJS/Ionic 路由 - Controller 不会在第二次调用状态时重新加载

cordova - Amazon S3 - POST 请求的存储桶策略?

node.js - 如何读取从Web客户端发送的nodejs服务器中的文件

node.js - 如何将 Whatsapp Web API 中的二维码对象转换为在浏览器中显示?

node.js - Node js 计数器值不会增加

angular - 让 Amazon Cognito 使用 angular2 和 typescript