rhe*_*er1 6 google-app-engine google-cloud-endpoints
我正在使用Python应用程序实施Cloud Endpoints,该应用程序使用自定义身份验证(GAE Sessions)而不是Google帐户.我需要验证来自Javascript客户端的请求,因此我希望能够访问cookie信息.
阅读这个其他问题让我相信这是可能的,但也许没有记录.我不熟悉App Engine的Java端,所以我不太确定如何将该片段翻译成Python.这是我的一个方法的示例:
class EndpointsAPI(remote.Service):
@endpoints.method(Query_In, Donations_Out, path='get/donations',
http_method='GET', name='get.donations')
def get_donations(self, req):
#Authenticate request via cookie
Run Code Online (Sandbox Code Playgroud)
ProtoRPC消息()的位置Query_In和Donations_Out原因messages.Message.req函数中的参数只是一个实例,Query_In我没有找到任何与HTTP数据相关的属性,但是我可能错了.
bos*_*ter 13
首先,我建议您尝试使用来自客户端的OAuth 2.0,就像在Tic Tac Toe 示例中所做的那样.
Cookie通常是在cookie头发送到服务器,并且这些值在WSGI环境与键通常被设置'HTTP_...',其中...对应于该标题名称:
http = {key: value for key, value in os.environ.iteritems()
if key.lower().startswith('http')}
Run Code Online (Sandbox Code Playgroud)
对于cookie,os.getenv('HTTP_COOKIE')将为您提供您寻找的标题值.不幸的是,默认情况下,这不会通过Google的API基础结构传递.
更新:自1.8.0版本起,已为Python应用程序启用此功能.要通过cookie发送,请指定以下内容:
from google.appengine.ext.endpoints import api_config
AUTH_CONFIG = api_config.ApiAuth(allow_cookie_auth=True)
@endpoints.api(name='myapi', version='v1', auth=AUTH_CONFIG, ...)
class MyApi(remote.service):
...
Run Code Online (Sandbox Code Playgroud)
这是一个(不一定是全面的列表)标题,通过它:
HTTP_AUTHORIZATIONHTTP_REFERERHTTP_X_APPENGINE_COUNTRYHTTP_X_APPENGINE_CITYLATLONGHTTP_ORIGINHTTP_ACCEPT_CHARSETHTTP_ORIGINALMETHODHTTP_X_APPENGINE_REGIONHTTP_X_ORIGINHTTP_X_REFERERHTTP_X_JAVASCRIPT_USER_AGENTHTTP_METHODHTTP_HOSTHTTP_CONTENT_TYPEHTTP_CONTENT_LENGTHHTTP_X_APPENGINE_PEERHTTP_ACCEPTHTTP_USER_AGENTHTTP_X_APPENGINE_CITYHTTP_X_CLIENTDETAILSHTTP_ACCEPT_LANGUAGETim*_*sch 10
对于在这里降落的Java人.您需要添加以下注释才能在端点中使用Cookie:
@Api(auth = @ApiAuth(allowCookieAuth = AnnotationBoolean.TRUE))
Run Code Online (Sandbox Code Playgroud)
(没有它,它将在本地开发服务器上工作,但不在真正的GAE实例上工作.)
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |