如何在Python中授予对google appengine页面的访问权限?

时间:2013-01-09 08:36:47

标签: python google-app-engine

我有一个简单的应用程序来提供页面,我希望只有几个已经登录Google的预定用户才能访问此页面。实际上,我只想通过Google Spreadsheets中的importHTML函数进行访问。

如何以最小的麻烦实现这一点?这是应用程序:

import webapp2

class MainPage(webapp2.RequestHandler):
  def get(self):
    self.response.out.write('/Statement.htm')

app = webapp2.WSGIApplication([('/Statement.htm', MainPage)],
                              debug=True)

这是app.yaml

application: *********
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  static_files: Statement.htm
  upload: Statement.htm

我在教程中看到了这一点:

from google.appengine.api import users

class MainPage(webapp2.RequestHandler):

        user = users.get_current_user()

但是这个“get_current_user”是谁?我不希望任何登录,我只是希望它是某种我可以检查的Google ID,如果/ else,则如果它与一个或两个允许的名称不匹配则提供错误页面。

3 个答案:

答案 0 :(得分:1)

您应该从您的Google应用引擎信息中心授予他们管理员权限 - 在管理下 - >权限 - 并添加到您的app.yaml文件中:

修改

这是一种使用jinja2模板系统的方法。

app.yaml文件:

application: statement
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /statement
  script: statement.app
  login: admin

libraries:
- name: jinja2
  version: latest

statement.py文件:

import webapp2
import jinja2
import os

jinja_environment = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))

class Statement(webapp2.RequestHandler):
    def get(self):
        template = jinja_environment.get_template('Statement.htm')
        self.response.out.write(template.render())



app = webapp2.WSGIApplication([('/statement', Statement)],
                              debug=True)

Statement.htm文件:

You must have been granted admin permission.

当您转到http://127.0.0.1:8080/statement时,您必须以管理员身份登录才能到达目的地。 这三个文件都在同一目录中。如果你的python主文件有其他名称,你应该在app.yaml文件中使用该名称和扩展名.app

script: your-python-file-name.app

答案 1 :(得分:0)

将“login:admin”放入app.yaml并将这些用户作为查看器添加到应用程序中。 请参阅https://developers.google.com/appengine/docs/python/config/appconfig#Requiring_Login_or_Administrator_Status

答案 2 :(得分:0)

由于importHTML函数似乎没有提供任何类型的授权,我只是将url处理程序更改为一个非常长的随机数字串(实际上是密码编码为SHA1)。

对于上面基于jinja的解决方案,我在app.yaml中添加了一个像这样的处理程序

- url: /a...................6/.*
  script: spreadsheet.app

其中spreadsheet.app指向spreadsheet.py,它与statement.py相同,但webapp2调用中的其他url字符串和新的类名称除外。

现在,通过浏览器访问的人需要被授权为管理员,而长链接仅存在于谷歌电子表格文档的单元格内,因此不会留在浏览器历史记录中或任何地方。

我希望它也不会被Google编入索引,也不会出现在搜索结果中。

也许不是完美的解决方案,但可行的解决方法。