【问题标题】:Implementing linkedin oauth2 with ionic/angularjs on frontend (hybrid mobile app) and expressjs+passportjs+mongodb on backend在前端(混合移动应用程序)和 expressjs+passportjs+mongodb 在后端实现linkedin oauth2
【发布时间】:2016-04-12 22:09:07
【问题描述】:

我的后端是在 AWS 上设置的,并且正在运行一个 expess 网络服务器。它是用passportjs配置的。

在前端,我希望所有用户都通过linkedin 登录。当他们按下按钮时,它会使用 Angular 的 $http.get 服务发出一个 http GET 命令。我试图实现的基本工作流程如下:

1) 客户端打开应用,点击使用linkedin登录,get请求发送到后端快递服务器

2)express服务器使用passportjs进行linkedin oauth2认证,随后将请求转发到linkedin服务器

3) Linkedin 的服务器然后响应客户端的请求以登录页面响应客户端

4) 使用用户登录凭据成功验证第 3 步中的页面后,访问令牌将发送到快速服务器,因为我将链接的重定向 URL 配置到它。

5) Express 服务器然后接收用户配置文件详细信息,然后将一些数据发送到客户端。

由于我使用的是 ionic 框架,我想接收数据,然后加载在 ionic 模板文件夹(前端本地)中定义的页面,并在步骤 5 中使用从服务器接收到的数据填充它。

为了做到这一点,我试图发出一个 $http.get 请求,该请求失败并出现错误: 步骤 2 上的 404。

$http.get('http://www.example.com:3000/auth/linkedin/').
success(function(data, status, headers, config) {
    console.log('success');
}).
error(function(data, status, headers, config) {
    console.log('failure '+data+', ' +status +', '+headers+', '+config)
});

打印出来:

"failure , 404, function (name) {
    "use strict";

    if (!headersObj) headersObj =  parseHeaders(headers);

    if (name) {
      return headersObj[lowercase(name)] || null;
    }

    return headersObj;
}, [object Object]"

我不确定这是否是解决方法。 另一种更成功的方法是使用window.location('http://www.example.com:3000/auth/linkedin/')。这能够跟踪到linkedin登录页面的重定向,并且在成功登录后,配置文件被返回到快速服务器。此方法在第 4 步之前运行良好。问题出在第 5 步,我无法将用户重定向回应用中定义的其他模板。

【问题讨论】:

    标签: angularjs node.js oauth-2.0 ionic-framework passport.js


    【解决方案1】:

    您应该编写一个角度服务来管理身份验证,而不是到处发出 GET 请求。

    这样的服务应该公开login()is_autheticated()get_username() 等函数。 然后,将 LoginService 注入到您的控制器中,您将不会遇到请求和承诺。

    至于你的重定向问题,看看ui-router

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2022-01-28
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      相关资源
      最近更新 更多