NodeJS ConnectyCube用户会话令牌创建问题-“意外签名”

mmvthczy  于 2024-01-07  发布在  Node.js
关注(0)|答案(1)|浏览(154)

我在使用ConnectyCube REST API进行用户管理时遇到了一个令人困惑的问题。我的代码成功地为操作生成了签名,例如创建app session token,但当试图创建user session token时,服务器总是返回“unexpected signature”错误。
下面是我用来生成签名的方法:

  1. const getSignature = () => {
  2. const nonce = Math.floor(Math.random() * 1000000);
  3. const timestamp = Math.floor(Date.now() / 1000);
  4. const stringForSignature = `application_id=${config.applicationId}&auth_key=${config.authKey}&nonce=${nonce}&timestamp=${timestamp}`;
  5. const signature = crypto.createHmac('sha1', config.authSecret).update(stringForSignature).digest('hex');
  6. return { signature: signature, timestamp: timestamp, nonce: nonce };
  7. }

字符串
签名生成似乎正常工作,因为我可以使用它成功创建应用会话令牌:

  1. const getAppSessionToken = async () => {
  2. const signature = getSignature();
  3. const response = await axios.post(
  4. 'https://api.connectycube.com/session', {
  5. 'application_id': config.applicationId,
  6. 'auth_key': config.authKey,
  7. 'nonce': signature.nonce,
  8. 'timestamp': signature.timestamp,
  9. 'signature': signature.signature
  10. }, { headers: { 'Content-Type': 'application/json' } });
  11. return response.data.session.token;
  12. }


但是,当尝试创建用户会话令牌时,服务器会返回“unexpected signature”错误:

  1. const createSessionWithLogin = async (emailAddress, password) => {
  2. const signature = getSignature();
  3. return await axios.post(
  4. 'https://api.connectycube.com/session',
  5. {
  6. 'application_id': config.applicationId,
  7. 'auth_key': config.authKey,
  8. 'nonce': signature.nonce,
  9. 'timestamp': signature.timestamp,
  10. 'signature': signature.signature,
  11. 'user': {
  12. 'email': emailAddress,
  13. 'password': password
  14. }
  15. },
  16. {
  17. headers: {
  18. 'Content-Type': 'application/json'
  19. }
  20. }
  21. );
  22. }


我将非常感谢您对可能导致此问题的原因的任何见解或故障排除的建议。谢谢!

nhjlsmyf

nhjlsmyf1#

您可以通过此代码获取用户令牌

  1. const crypto = require('crypto');
  2. const axios = require('axios');
  3. // Config object with your application credentials
  4. const config = {
  5. applicationId: 'your App ID',
  6. authKey: 'your authKey',
  7. authSecret: 'your authSecret',
  8. emailAddress: 'your login id',
  9. password: 'your password'
  10. };
  11. // Function to generate the signature
  12. const getSignature = () => {
  13. const nonce = Math.floor(Math.random() * 1000000);
  14. const timestamp = Math.floor(Date.now() / 1000);
  15. const stringForSignature = `application_id=${config.applicationId}&auth_key=${config.authKey}&nonce=${nonce}&timestamp=${timestamp}`;
  16. const signature = crypto.createHmac('sha1', config.authSecret).update(stringForSignature).digest('hex');
  17. return { signature: signature, timestamp: timestamp, nonce: nonce };
  18. };
  19. // Function to get the application session token
  20. const getAppSessionToken = async () => {
  21. const signature = getSignature();
  22. const response = await axios.post(
  23. 'https://api.connectycube.com/session', {
  24. 'application_id': config.applicationId,
  25. 'auth_key': config.authKey,
  26. 'nonce': signature.nonce,
  27. 'timestamp': signature.timestamp,
  28. 'signature': signature.signature
  29. }, { headers: { 'Content-Type': 'application/json' } }
  30. );
  31. return response.data.session.token;
  32. };
  33. // Function to create a session with user login
  34. const createSessionWithLogin = async (login, password) => {
  35. const signature = getSignature();
  36. const userData = {
  37. 'user[login]': login,
  38. 'user[password]': password
  39. };
  40. const requestData = {
  41. 'application_id': config.applicationId,
  42. 'auth_key': config.authKey,
  43. 'nonce': signature.nonce,
  44. 'timestamp': signature.timestamp,
  45. 'signature': signature.signature,
  46. ...userData
  47. };
  48. return await axios.post(
  49. 'https://api.connectycube.com/session',
  50. requestData,
  51. {
  52. headers: {
  53. 'Content-Type': 'application/json'
  54. }
  55. }
  56. );
  57. };
  58. // Example usage
  59. getAppSessionToken()
  60. .then(token => console.log("Session Token:", token))
  61. .catch(error => console.error("Error fetching token:", error));
  62. // Example usage of createSessionWithLogin
  63. createSessionWithLogin(config.emailAddress, config.password)
  64. .then(response => console.log("Session with login:", response.data))
  65. .catch(error => console.error("Error creating session with login:", JSON.stringify(error)));

字符串
结果

展开查看全部

相关问题