API Error: You are not permitted to view the requested resource

I am receiving the following error:

DiscourseApi::UnauthenticatedError: 
{"errors"=>["You are not permitted to view the requested resource."], "error_type"=>"invalid_access"}

when I make the ruby API call ‘category_latest_topics’

response = client.category_latest_topics("<some_category>") 

This is due to the category permissions (the category is not public). I tried to authenticate by using

client.api_username = "system"  

and making sure “system” is a member of the group that has permissions to the category but still no luck! Any suggestions or workarounds?

2 « J'aime »

No response so far. Am I posting this in the right forum?

Try using a different user, other than System. Issue an API key for a different user. You will need to experiment.

No luck. Tried issuing API key for different users who have permission to the category but still no access.

Would be awesome if anyone else has suggestions for this?

How can I access a private category via the API. This should not be an issue for users/system with admin rights to the forum.

I’m having the same issue, can someone take a look into this?

1 « J'aime »

Have you attempted to generate a key from your account? You are the admin who created the forum, yes? You say “users/system” so I am wondering if you tried your own account.

Yes i am the admin of my forum.

I have tried both my username and system with no luck. I can’t call client.category_latest_topics(<category_name>) even though the user has permissions to the category

I feel some other variable exists and is causing this error; one that cannot be seen due to the limited info provided.

Be sure to check these topics in regards to setting up and using the Discourse API, if you have not yet done so.

Appreciate your help. If you read my original post i am using the ruby api. I have also looked through the documentation before posting this topic.

If you could show me what variable i am missing or where to exactly to find out more i would appreciate it.

1 « J'aime »

Est-ce que d’autres personnes rencontrent ce problème en ce moment ? J’essaie depuis deux jours d’utiliser l’API, mais je rencontre des erreurs similaires à chaque fois. Je ne sais pas si j’oublie une étape ou si quelque chose a changé.

J’ai créé une nouvelle clé API pour l’utilisateur system. J’ai également essayé de créer une clé API pour tous les utilisateurs, puis d’utiliser mon compte administrateur.

En utilisant le gem Ruby discourse_api :

DiscourseApi::UnauthenticatedError ({"errors"=>["Vous n'êtes pas autorisé à afficher la ressource demandée. Le nom d'utilisateur ou la clé API est invalide."], "error_type"=>"invalid_access"})

J’ai également essayé avec ce code issu d’un autre post :

require 'net/http'
require 'uri'

INSTANCE_URL = 'https://forum.example.com/admin/users/list/all.json?email=user@example.com'
API_USERNAME = 'system'
API_KEY = 'une_nouvelle_cle_api_ici'

def send_request
  url = URI.parse(INSTANCE_URL)
  request = Net::HTTP::Get.new(url.path)
  request.set_form_data({'api_username' => API_USERNAME, 'api_key' => API_KEY})
  http = Net::HTTP.new(url.host, url.port)
  response = http.request(request)

  if response.code == '200'
    puts "Succès !"
  else
    puts "Erreur"
    puts response.code
  end
end

send_request # 400

J’ai également essayé d’utiliser l’API en incluant api_username et api_key dans les données de formulaire avec une requête brute, mais j’obtiens une erreur 404.

Je cherche à écrire un script qui lit une liste d’adresses e-mail, récupère les noms d’utilisateurs, puis les désabonne de tous les e-mails Discourse.

Pour l’erreur que vous rencontrez avec le code Ruby brut, le problème est que les champs Api-Key et Api-Username doivent être définis dans les en-têtes de la requête. Les noms des champs de l’API doivent également utiliser des tirets (-) au lieu de traits de soulignement (_). Consultez la section Authentification en haut de https://docs.discourse.org/ pour plus de détails sur l’authentification de la requête.

Je ne suis pas sûr de ce qui pourrait causer l’erreur lorsque vous effectuez l’appel avec le gem Discourse API. La cause la plus probable est que vous n’utilisez pas les bonnes identifiants API. Assurez-vous d’utiliser une clé API dont le niveau utilisateur est défini sur Tous les utilisateurs :

Si cela ne résout pas le problème, publiez ici la requête que vous essayez d’effectuer et je l’examinerai.

5 « J'aime »

Merci, cela fonctionne. J’ai suivi les deux premiers messages ici, qui pourraient avoir besoin d’être mis à jour :

2 « J'aime »

Merci de l’avoir signalé. J’ai mis à jour le message d’origine et supprimé les messages les plus anciens du sujet.

3 « J'aime »