2016-01-12 2 views
4

Я пытаюсь переопределить CheckIsAdmin метод присутствует в ApiCallHandler класс. Поэтому я последовал за this ответами. Но я всегда получаю пустой dict при печати self.request.cookies.GAE self.request.cookies возвращает пустой dict

В какой-то момент я получаю значения при печати self.request.cookies, но это не так. Я проверил, что мой сервер работает, и я уже looged в.

remote_api.py выглядит

import re 
import models 
from google.appengine.ext.remote_api import handler 
from google.appengine.ext import webapp 

MY_SECRET_KEY = '[email protected]' # make one up, use the same one in the shell command 


class ApiCallHandler(handler.ApiCallHandler): 

    def CheckIsAdmin(self): 
     ''' 
     Determine if admin access should be granted based on the 
     auth cookie passed with the request. 
     ''' 

     ''' 
     print 'App id ' + models.APPLICATION_ID 
     print 'on checkIsAdmin' 
     print 'request.cookies ' + str(self.request.cookies) 
     login_cookie = self.request.cookies.get('dev_appserver_login', '') 
     match = login_cookie.split(':') 
     print 'headers '+ str(self.request.headers) 
     if match and match[0] == MY_SECRET_KEY \ 
       and 'X-Appcfg-Api-Version' in self.request.headers: 
      print 'Going to return true' 
      return True 

app = webapp.WSGIApplication([('.*', ApiCallHandler)]) 

часть app.yaml выглядит

- url: /remoteapi.* 
    script: api.remote_api.app 

Это правильно, где мой .py файл существует внутри api папка ..

Когда я пробовал эту команду,

echo "[email protected]" | appcfg.py upload_data [email protected] --passin --url=http://localhost:8080/remoteapi --num_threads=4 --db_filename=bulkloader.csv 

это показывает недопустимый параметр --passin и он отлично работает, если я поставил return True в начале CheckIsAdmin метода. Но ему не хватает безопасности.

+0

Вы знаете сверло, отгоняете его до [mcve] –

+0

@ JoshJ r u там? –

+0

Я не знаю, почему ваши куки пустые, потому что вы не опубликовали пример, который я могу использовать для воссоздания вашей проблемы. Я предполагаю, что у вас что-то не так, но я могу только догадываться, без кода, на который нужно смотреть. –

ответ

1

Похоже, что они удалили --passin и теперь исключительно полагаются на oauth.

https://code.google.com/p/googleappengine/wiki/SdkReleaseNotes#Version_1.9.24_-_July_20,_2015

--passin был флаг, который вызвал печенье, чтобы установить. Похоже, вам нужно перейти на версию sdk ниже 1.9.24 или изменить команду на использование oauth и удалить настраиваемый код ApiCallHandler.

+0

добавлен баунти за этот вопрос. Нет ли способа без понижения? –

+0

Я не рассматривал инструмент в последнее время, поэтому я не знаю, как обойти его. Я уверен, что вы можете создать учетную запись службы и использовать ее токен oauth, чтобы сделать то же самое. –

Смежные вопросы