当前位置: 首页 > 知识库问答 >
问题:

ionic 3标头未向服务器发送授权“承载”令牌

姜嘉良
2023-03-14

我正在做一个带有用户名和密码的登录屏幕。如果登录成功,服务器将返回令牌。然后,我试图调用另一个函数来获取用户信息,但没有传递授权标头。我正在邮递员上尝试我的服务器方法,它工作得很好,所以我相信问题出在邮件头上。有人能告诉我该怎么做吗?

let url = urlConst.Login;
let params1 = new HttpParams();

let loader = this.loadingcontroller.create({
  content: stringEngConst.signinngin
});

let attributes = {
  username: this.uname.value.toLowerCase(),
  password: this.password.value,
  grant_type: "password"
};

var headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let body = 'username=' + this.uname.value.toLowerCase() + '&password=' + this.password.value + '&grant_type=password';
let data: Observable < any > = this.http.post(url, body, {
  headers: headers
});

loader.present().then(() => {

      data.subscribe(result => {
            if (result.access_token != null) {

              this.signintoken = result.access_token;
              this.storage.set(storageConst.SIGN_IN_TOKEN, result.token_type + " " + result.access_token);
              headers.append('Authorization', 'Bearer ' + this.signintoken);
              let url1 = 'http://localhost:57940/API/Account/GetUserInfo/';
              let info: Observable < any > = this.http.get(url1, {
                headers: headers
              });

              info.subscribe(result => {
                /*Do Something*/
              });
            }

请注意,result.access_token!=null是true.并且我成功地拿回了令牌。但是它不会被再次传递到第二个url(info)

共有2个答案

蒋硕
2023-03-14

您正在使用与第一个超文本传输协议请求相同的标头:

var headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded');

根据后续调用的结束点,可能需要以不同的方式设置标题:

尝试使用创建新标题

var headers2 = new HttpHeaders();
headers.append('Content-Type', 'application/json');

或者完全摆脱内容类型,这取决于您的最终目标。

另外,如果您使用的是Ionic 3,那么检查您使用的Http模块(HttpClient或旧的模块)是值得的,因为它们在处理请求选项的方式上存在一些差异。

晁璞
2023-03-14

看起来这篇文章可以帮你解决问题:https://stackoverflow.com/a/47805759/6599076

您可能需要使用:

headers=标题。附加(‘授权’、‘持票人’这一符号)

 类似资料:
  • 我将授权:承载{令牌}作为HTTP请求传递给我的SymfonyRest控制器。 我的请求: 在我的控制器内: 由于某种原因,当我使用Symfony的请求方法时,授权标头对我的控制器不可用。当我使用PHP的getallheaders()时,授权头将按预期显示。你知道为什么Symfony没有看到吗? 谢谢

  • 我尝试使用JQuery Ajax进行基本身份验证。我像这样向ajax请求添加授权标头。 然后在ASP. Net Web服务中,我尝试获取此标头。 当我打印到标题时,我看不到授权标题 缓存控制:无缓存连接:保持活动状态Pragma:无缓存接受:接受编码:gzip,deflate接受语言:tr tr,tr;q=0.9,en-US;q=0.8,en;q=0.7主机:示例。com参考:http://loc

  • 为什么授权标头主要用于向服务器发送承载令牌?为什么我们不将授权令牌作为URL参数发送或将其作为请求正文的json有效负载发布?

  • 我目前正在客户端应用程序上使用和。我用另一个请求回调()运行一个axios请求(),在第一个请求的响应中,我收到一个新的令牌。我尝试在回调的headers载体中设置这个新内标识。这不起作用:在回调()时,没有设置新的令牌,并且在头中没有设置更多的授权承载。 你知道问题出在哪里吗?

  • 我已经实现了一个使用基本身份验证(使用Spring Security性)的web服务器。 我在访问URL时禁用了默认身份验证入口点(它只返回401,而不是用www身份验证标头响应401),目的是防止浏览器显示身份验证弹出窗口。 我能够用javascript代码和命令行工具(如curl)连接到服务器,但是当我用浏览器(chrome)测试它时 <代码>curl-v-u用户:密码本地主机:8080/用户

  • 我们有一个连接到Exchange服务器的MVC应用程序。我们使用以下代码连接到本地服务器以创建服务: 这很好,但现在我们的IT部门正在将Exchange服务器迁移到云上,一些用户在云服务器上,而另一些用户在本地。所以我把代码改成: 我正在使用服务号进行自动发现(由于某种原因,它不适用于常规帐户),然后我正在将服务的凭据更改为登录的用户,因此他可以访问收件箱。问题是,随机地,服务器返回“请求失败。远