2013-01-09 75 views
0

我有一個簡單的應用程序供應一個頁面,我希望這個頁面只能被一些已經登錄到Google的預定用戶訪問。實際上,我只希望通過Google Spreadsheets中的importHTML函數進行訪問。如何在Python中授予對google appengine頁面的訪問權限?

如何用最小的麻煩來實現這一點?這裏的應用程序:

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,我可以使用if/else進行檢查,如果它不匹配一個或兩個允許的名稱,則會提供錯誤頁面。

回答

0

將「login:admin」放入您的app.yaml並將這些用戶添加爲應用程序的查看器。 見https://developers.google.com/appengine/docs/python/config/appconfig#Requiring_Login_or_Administrator_Status

+0

這正是我想要的,唯一的問題是我無法獲得我的statement.py和app.yaml文件的正確組合。如果我在static_files部分的處理程序中添加login:admin,它會給我一個錯誤,如果我爲「script:main.app」創建單獨的處理程序,但它不會更改任何內容,那麼該頁面仍然會顯示給任何人。如果我將它更改爲「script:statement.py」,它也會引發錯誤。 – Stangoesagain

1

你應該給他們管理權限從您的谷歌應用程序引擎的儀表板 - 在管理 - >權限 - 而添加到您的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

+0

這似乎沒有達到任何目的。之後,另外的app.yaml看起來是這樣的: '版本:1 運行:python27 API_VERSION:1個 線程:真 處理程序: - 網址:/.* static_files:Statement.htm 上傳:Statement.htm - url:/Statement\.htm script:main.app login:admin' – Stangoesagain

+0

你錯了。 app.yaml從頂部→下來讀取,首先匹配條目被選中。你的第一個入口/.*匹配所有內容。翻轉這些條目。 –

+0

@T。 Steinrücken我還沒有想出如何正確地翻轉條目,同時基於jinja2的解決方案的工作,但只有在瀏覽器,當我的谷歌電子表格試圖通過importHMTL訪問它會得到「錯誤:數據無法檢索。網址「。我如何賦予Google電子表格管理員權限?我認爲它會嘗試訪問網絡上的任何內容,並使用我的憑據登錄到Google。我可能需要一個不同的解決方案來控制importHTML類型的訪問。准許訪問基於Google腳本的getURL會更容易嗎?我可以切換電子表格來使用它。 – Stangoesagain

0

由於IMPORTHTML功能似乎並沒有提供任何形式的授權,我只是改變網址處理程序轉換爲一串非常長的隨機數(實際上密碼編碼爲SHA1)。

向上述我的神社基於溶液app.yaml中添加了一個處理程序,像這樣

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

凡spreadsheet.app指向一個spreadsheet.py其是相同,除了對於不同的URL statement.py webapp2調用中的字符串和一個新的類名稱。

現在,通過瀏覽器訪問的人需要被授權爲管理員,而長鏈接僅存在於Google電子表格文檔的單元格內,因此不會留在瀏覽器歷史記錄或任何地方。

我希望它也不會被Google索引,也不會出現在搜索結果中。

也許不是完美的解決方案,而是一個可以通過的解決方法。

相關問題