微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Angular

如何解决从 Angular

当我通过 Angular 调用 api 时出现此错误。但是,当我通过 Postman 调用它时,我得到了想要的响应。我不知道我做错了什么。以下是我使用的代码

generatetoken() {
    let serverUIUri: string;
    const sessionState = sessionStorage.getItem('state');
    if (sessionState === undefined || sessionState !== this.state) {
        this.router.navigate(['/account/login']);
    } else {
        this.userService.tokenGeneration("SSO",'authorization_code','http://localhost:4200',this.code).subscribe((response: any) => {
            sessionStorage.setItem('demo_cookiee',response.accesstoken);
            
            this.router.navigate(['/']);

        },error => {
            this.continuetoAppSelection();
            //this.router.navigate(['/account/login']);
        });
    }
}

tokenGeneration(clientId: any,authorizationCode: any,redirectUri: any,code: any): Observable<any> {
    const options = {
        headers: new HttpHeaders()
            .append('Content-Type','application/x-www-form-urlencoded'),withCredentials: true,origin: 'http://localhost:4200/',referer: 'http://localhost:4200/'
    };

    const body = {
        grant_type: authorizationCode,redirect_uri: redirectUri,client_id: clientId,code: code
    }
    return this.demohttp.postData(this.url + 'connect/token',options,body);
}

postData(url: string,headers: any,body: any): Observable<any> {
    return this.http.post(url,body,headers);
}

我也将 Body 和 Header 中的相同参数传递给邮递员。在那里它成功地得到了回应。但是,通过代码它给出了以下错误

Object {error: "invalid_request",error_description: "The mandatory 'grant_type' parameter is missing."}

我将 grant_type 作为“authorization_code”传递,但它仍然给出错误。知道我做错了什么吗?

解决方法

我假设您正在使用某种形式的 OIDC/OAuth2 服务。如果您查看规范 here,则必须使用 FormData 发布参数,而不是作为请求的正文。

可能就是这个区别。

猜猜它应该看起来像这样(未经测试,从我的脑海中浮现 - 如果失败,请参阅现有的 SO 问题/教程)。

tokenGeneration(clientId: any,authorizationCode: any,redirectUri: any,code: any): Observable<any> {
    const options = {
        headers: new HttpHeaders()
            .append('Content-Type','application/x-www-form-urlencoded'),withCredentials: true,origin: 'http://localhost:4200/',referer: 'http://localhost:4200/'
    };
    
    const form = new FormData();
    form.append('grant_type',authorizationCode);
    form.append('redirect_uri',redirectUri);
    form.append('client_id',clientId);
    form.append('code',code);

    return this.demohttp.postData(this.url + 'connect/token',form,options);
}
,

我纠正了这个问题,body 对象被正确创建,因此我收到错误缺少必需的“grant_type”参数。。但是在修复 body 对象后,它工作得很好。

ALTER TABLE "tableName"
ALTER "price" TYPE double precision USING price::double precision,ALTER "price" DROP DEFAULT,ALTER "price" SET NOT NULL;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?