gpt4 book ai didi

angular - Angular 中的 Twitter API Request_Token

转载 作者:太空狗 更新时间:2023-10-29 17:51:20 27 4
gpt4 key购买 nike

所以,我在为我的 Angular 应用程序制作 Twitter 登录方法时遇到了问题。问题是我什至无法完成第一步。我需要向 request_token API 发出发布请求(我正在执行此步骤 https://dev.twitter.com/web/sign-in/implementing),但我仍然收到“错误的身份验证数据” ' 错误(只是想让你知道:我一直在弄乱我的代码来完成这项工作,我得到的最好的结果是 'Could not authenticate you' 错误) .

所以在我展示我的代码之前,让我确保我理解正确。因为我请求 token ,所以我没有在我的代码中传递任何access_token。我在创建签名时并没有在任何地方使用 token ,而是在授权请求中传递 oauth_callback 字符串。

所以,这是我将 POST 发送到 request_token 的代码。

callTwLogin(): void{
const url = 'https://api.twitter.com/oauth/request_token';
const callback = encodeURIComponent('http://127.0.0.1/');

this.Oauth_timestamp = this.createTimestamp(); // We create a timestamp in seconds.
this.Oauth_nonce = this.randomString(32); // We create a 32-long random string.

this.http.post(url, {headers: new HttpHeaders().set('Content-Type','application/x-www-form-urlencoded')
.set('Authorization','OAuth oauth_consumer_key="'+this.Oauth_consumerkey+'", oauth_nonce="'+this.Oauth_nonce+'"oauth_signature="'+encodeURIComponent(this.createSignature())+'", oauth_signature_method="HMAC-SHA1", oauth_timestamp="'
+this.Oauth_timestamp+'", oauth_version="1.0"')
})
.subscribe(rsp => console.log("Twitter: " +rsp)); // Should it have Access Token if it is a request token?
}

createTimestamp() 和 randomString() 函数非常简单,因此我不会展示它们。然而,createSignature() 函数真的很重要,所以这里是:

createSignature():string{
let rawURL: string = "POST&" + encodeURIComponent("https://api.twitter.com/oauth/request_token") + "&";
let parameterString: string = "include_entities=true" +
"&oauth_consumer_key=" + this.Oauth_consumerkey +
"&oauth_nonce=" + this.Oauth_nonce +
"&oauth_signature_method=HMAC-SHA1"+
"&oauth_timestamp=" + this.Oauth_timestamp +

"&oauth_version=1.0";
let signingString = rawURL + encodeURIComponent(parameterString);
let signingKey = encodeURIComponent(this.ConsumerSecret) + "&"; // No TokenSecret because its Request_Token.
let signatur: string = this.CryptoJS.HmacSHA1(signingString, signingKey).toString(this.CryptoJS.enc.Base64);
console.log("Signatur: " + signatur);
return signatur;
}

如您所见,我删除了签名基本字符串和签名 key 中的 token 。我究竟做错了什么?我已经为此苦苦挣扎了数周,但无法完成。

请帮帮我。谢谢!

===================================更新 1 ========== ====================

所以我按照 Jon Susiak 的要求做了。我添加了之前忘记添加的逗号,我将 oauth_callback 添加到我的 parameterString 和我的授权请求中,然后删除了 include_entities

这是我的新 createSignature 方法:

let callback = "http://127.0.0.1/"
let rawURL: string = "POST&" + encodeURIComponent("https://api.twitter.com/oauth/request_token") + "&";
let parameterString: string = "oauth_callback=" +callback+
"&oauth_consumer_key=" + this.Oauth_consumerkey +
"&oauth_nonce=" + this.Oauth_nonce +
"&oauth_signature_method=HMAC-SHA1"+
"&oauth_timestamp=" + this.Oauth_timestamp +
"&oauth_version=1.0";
let signingString = rawURL + encodeURIComponent(parameterString);
let signingKey = encodeURIComponent(this.ConsumerSecret) + "&"; // No TokenSecret because its Request_Token.
let signatur: string = this.CryptoJS.HmacSHA1(signingString, signingKey).toString(this.CryptoJS.enc.Base64);
console.log("Signatur: " + signatur);
return signatur;

还有我的新 POST 代码

const url = 'https://api.twitter.com/oauth/request_token';
const callback = encodeURIComponent('http://127.0.0.1/');
const body = {
oauth_callback: callback
};
this.Oauth_timestamp = this.createTimestamp(); // We create a timestamp in seconds.
this.Oauth_nonce = this.randomString(32); // We create a 32-long random string.
this.http.post(url, {headers: new HttpHeaders()
.set('Authorization','OAuth oauth_callback="' + callback
+ '", oauth_consumer_key="' + this.Oauth_consumerkey
+ '", oauth_nonce="' + this.Oauth_nonce
+ '", oauth_signature="' + encodeURIComponent(this.createSignature())
+ '", oauth_signature_method="HMAC-SHA1", oauth_timestamp="' + this.Oauth_timestamp
+ '", oauth_version="1.0"')
})
.subscribe(rsp => console.log("Twitter: " +rsp));

它仍然不起作用,如果我不将我的回调作为 POST 参数发送,它会抛出“错误的身份验证数据(错误 400)”。如果我确实将它作为参数发送,它会抛出“无法对您进行身份验证(错误 401)”

请帮忙!

最佳答案

有更新:

你从不使用body。这是第二个参数,最终的选项是第三个。

关于angular - Angular 中的 Twitter API Request_Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49932318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com