【问题标题】:send custom access token as http request将自定义访问令牌作为 http 请求发送
【发布时间】:2016-08-06 21:52:09
【问题描述】:

我想使用 oauth 身份验证将 api 与 mvc 站点连接起来。 为此,我需要通过 http 请求发送访问令牌,如下所示。

addPostComment: function addPostComment(postid, UserId, comment, accessToken) {

                var request = $http({
                    method: "post",
                    url: apiPath.addPostComment,
                    data: {
                        SocialPostId: postid,
                        CommentDescription: comment,
                        CommentedUserId: UserId,
                        CommentedDate: new Date()
                    },
                    params: {
                        action: "post"
                    },                   
                    beforeSend: function (xhr) {

                        xhr.setRequestHeader('Authorization', 'bearer ' + accessToken);
                    }
                });
                return (request.then(handleSuccess, handleError));
            }

参数accessToken有值。但是当我设置为请求头时,它总是说Authrization: Bearer undefined。

谁能告诉我这段代码有什么问题?

【问题讨论】:

  • 也许你可以直接说 headers: {'Authorization' : 'bearer ' + accessToken } 而不是在 beforeSend 中添加它们..
  • stackoverflow.com/questions/22140591/… 据我了解,如果没有拦截器,您不能在 angularjs "$http" 中使用 beforeSend。

标签: angularjs ajax api oauth


【解决方案1】:
    $http({
      method: "post",
                url: apiPath.addPostComment,
                data: {
                    SocialPostId: postid,
                    CommentDescription: comment,
                    CommentedUserId: UserId,
                    CommentedDate: new Date()
                },
                params: {
                    action: "post"
                }, 
      headers: {
      'Authorization': 'bearer ' + accessToken
      }
    });

你可以像这样发送 HTTP 请求......

【讨论】:

  • 是的,它工作正常。但我想在发送之前更新请求中的标头,所以我正在使用这种方法。在这段代码中,apipath 是常量。 angular.module("test").constant('apiPath', {'accessToken': "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1laWQiOiIxIiwidW5pcXVlX25hbWUiOiJzdXBlcmFkbWludX"。如果我在此常量中设置 accesstoken 并像之前一样在服务中使用Send: function Authorization', 'bearer' + apiPath.accessToken); }
  • 嗨,Adem,实际上我声明了 const bearerToken=accessToken 并在 beforeSend 函数中使用它,它仅适用于 postmethod。如果我在 get 方法中使用相同的概念,它就不起作用。 http请求发送授权为未定义的承载。任何人都知道这是什么实际问题以及如何解决这个问题?
  • 如果要更新标头,只需使用服务获取访问令牌,并通过调用代码中的方法获取访问令牌,` headers: {` 'Authorization': 'bearer ' + yourService.getAccessToken() } 和将 yourService 添加为依赖项,将解决您的问题..因此您将在所有请求中获得更新的访问令牌..
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 2011-08-13
相关资源
最近更新 更多