Приложение Marketplace + API предоставления: проверьте, является ли пользователь администратором - PullRequest
5 голосов
/ 18 мая 2011

Я пытаюсь проверить, является ли пользователь администратором своего домена Служб Google, в приложении, установленном на торговой площадке Служб Google.

Я добавил это в manifest.xml:

<Scope id="Provisioning API">
  <Url>https://apps-apis.google.com/a/feeds/user/#readonly</Url>
  <Reason>This application can list domain users to give them permissions.</Reason>
</Scope>

Затем я установил тестовый обработчик, чтобы он заработал:

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util

import gdata.alt.appengine
import gdata.apps.service
import gdata.auth

# App id, key and secret from the Google Apps Marketplace.
APPLICATION_ID = 'XXX'
CONSUMER_KEY = 'XXX'
CONSUMER_SECRET = 'XXX'

class SetupHandler(webapp.RequestHandler):
    def get(self, *args):
        # The domain where this app is installed.
        domain = 'my_customer_domain.com'
        # A username to check.
        username = 'webmaster'

        sig_method = gdata.auth.OAuthSignatureMethod.HMAC_SHA1
        service = gdata.apps.service.AppsService(source='tipfy-com',
                                                 domain=domain)
        service.SetOAuthInputParameters(sig_method, CONSUMER_KEY,
                                        consumer_secret=CONSUMER_SECRET,
                                        two_legged_oauth=True,
                                        requestor_id=APPLICATION_ID)
        service.ssl = True
        service.debug = True
        gdata.alt.appengine.run_on_appengine(service)

        lookup_user = service.RetrieveUser(username)
        if lookup_user.login.admin == 'true':
            res = username + ' is an admin.'
        else:
            res = username + ' is not an admin.'

        self.response.out.write(res)

app = webapp.WSGIApplication([
    ('/.*', SetupHandler),
], debug=True)

def main():
    util.run_wsgi_app(app)

if __name__ == '__main__':
    main()

Но я получаю ответ 401 («Неизвестный заголовок авторизации»). Я не знаю, что я делаю неправильно или как отлаживать дальше.

  • Правильно ли введен манифест?
  • Разделение user.email() Можно ли получить имя пользователя и домен пользователя? (Я отладил его, и в моем случае это было: я получил «webmaster» и «example.com», которые были пользователем и доменом Служб Google, где было установлено приложение).

Чего мне не хватает?

Редактировать: По какой-то причине административная панель не запрашивала разрешение на предоставление доступа к предоставленным областям. После того как я предоставил его, приведенный выше код работал. Так что возьмите это за рабочий пример!

Ответы [ 3 ]

2 голосов
/ 19 мая 2011

Вам не нужно повторно добавлять свое приложение для работы с областями, просто убедитесь, что на панели инструментов администратора GoogleApps, в настройках приложения, у вас "Предоставить доступ" и Доступ к данным is " Предоставленный ». В противном случае просто предоставьте этот доступ.

Разделение user.email() работает для меня как прелесть, потому что user.nickname() в тестировании на локальном хосте содержит полный адрес электронной почты, а не как производство (где оно содержит имя пользователя).

Убедитесь, что запрашивающим пользователем является admin .

0 голосов
/ 25 декабря 2011

Admin apis [предоставление api и т. Д.] Теперь доступны для редакций Служб Google.

http://googleappsdeveloper.blogspot.com/2011/12/more-administrative-apis-now-available.html

0 голосов
/ 18 сентября 2011

Я встретил точно такую ​​же проблему, которая продолжает давать мне:

Неизвестный заголовок авторизации

Ошибка 401

Я пользуюверсия Служб Google, это может быть основной причиной этой проблемы?Как я знаю, API предоставления поддерживает только премиум-аккаунт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...