【问题标题】:Ajax authentication using CURL request: Ionic app, Django, Rest, Oauth2使用 CURL 请求的 Ajax 身份验证:Ionic app、Django、Rest、Oauth2
【发布时间】:2016-04-07 00:38:02
【问题描述】:

我成功地使用 curl 请求通过 Django-social-auth 对我的 Django 项目中的用户进行身份验证,并使用 Facebook 令牌返回我个人网站的令牌。很简单,我有一个 Facebook 令牌,我将其转换为 Django 令牌作为回报,但我只是使用 CURL 请求来完成这一壮举。我使用的框架来自 Philip Garnero (1)。

CURL 请求 - curl -X POST -d "grant_type=convert_token&client_id=&client_secret=&backend=facebook&token=" http://localhost:8000/auth/convert-token

当我尝试使用 AJAX 请求执行此操作时,就会出现混乱。 我的ajax设置方式有问题吗?在将我的 facebook 令牌转换为经过身份验证的 Django 令牌之前,我是否需要先获取一个 csrf 令牌?

更新:我在通过代理运行我的 ajax 请求时收到 400 错误 unsupported_grant_type。该请求与我在 curl 命令和 Postman 命令中成功执行的请求相同。

Ajax 请求:

$http({
        url: "proxy/url/...",
        async: false,
        crossDomain: true,  
        method: "POST",
        data: {
          "client_id": "...",
          "client_secret": "...",
          "grant_type": "password",
          "username": "...",
          "password": "..."
        },
        headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
        }        
        }).success(function(data, status, headers, config) {
            console.log(data);
        }).error(function(data, status, headers, config) {
            console.log("error status = " + status);
            console.log(angular.toJson(data));
        });

(1) - https://github.com/PhilipGarnero/django-rest-framework-social-oauth2

【问题讨论】:

  • is there something wrong with the way my ajax is setup? 给你同样的问题.. 什么不起作用?
  • 您在请求中发送空字符串。这看起来像一个问题,但您在 CURL 示例中也是如此。请更清楚您有什么问题。
  • 很抱歉缺少开始的信息。我故意将字符串留空以隐藏敏感数据。您可以假设在 curl 请求中成功的相应信息随后被放置在 javascript 中。至于我收到的具体错误,它们都是状态 0。从我目前所读的内容来看,我认为跨域脚本存在问题,但我正在从 apache cordova javascript 文件运行这些脚本(这对我来说没有意义)。
  • 只是想我会包含这个,我的测试脚本在一个名为 Postman 的 api 工具中工作。
  • 更新:我在通过代理运行我的 ajax 请求时收到 400 错误 unsupported_grant_type。该请求与我在 curl 命令和 Postman 命令中成功执行的请求相同。

标签: angularjs django rest curl oauth2


【解决方案1】:

我发现了这个问题,但我无法指出我为使其正常工作所做的具体事情。相反,我会写下我为获得一个工作系统所做的一切。我的特定示例是一个离子应用程序,它使用 facebook 身份验证并将令牌转换为 django csrf 令牌,用于跟踪用户。

我的设置:Django、Django rest-framework Social Oauth2(Philip Garnero 的设置)、Django social auth、angular js、cordova facebook 插件、ionic(充当前端的第 3 方应用程序),最后是配置的代理服务。

步骤:第一,确保安装了rest api系统。我使用了 Philip Garnero 的 api (1)。一旦我从 Garnero 获得了可安装的软件包,我就必须配置一个 ionic 代理服务。我使用 Ionic 的教程来完成它 (2)。该文档值得阅读以了解跨域请求的要点。最后,如果没有测试和研究,我找不到附加到 ajax 请求的正确标头。我最终使用了一个非常有用的工具 Postman 来解决它。 这是那个“令人困惑的困难”请求的愚蠢示例:

$http.post(Url, queryStringData,
        {headers: {
              'Accept': '*/*',
              "cache-control": "no-cache",
              'Content-Type': 'application/x-www-form-urlencoded'
        }        
        }).success(function(data, status, headers, config) {
            console.log(data.access_token);
        }).error(function(data, status, headers, config) {
            console.log("error status = " + status);
            console.log(angular.toJson(data));
        });

如果您有任何问题,请发表评论。我会尽我所能清理原始帖子,如果其他人有同样的问题,我可能会考虑一个教程。我花了 5 个小时试图破解这个。

(1)-https://github.com/PhilipGarnero/django-rest-framework-social-oauth2 (2)-http://blog.ionic.io/handling-cors-issues-in-ionic/

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2021-12-11
    • 2020-09-12
    • 2012-09-02
    • 1970-01-01
    • 2018-02-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多