2016-04-19 7 views
1

私はnginx/uWSGIを実行しており、ログインしたユーザーだけがアクセスできるように 'auth.requires_login()'(https://groups.google.com/forum/#!topic/web2py/0j92-sPp4bc)を使用してweb2pyサイトをロックしようとしています。それは/ static /の下のコンテンツさえも含んでいます。ドキュメントで推奨されているように、私はWeb2py&nginx - 静的フォルダを設定する必要があります

location ~* /(\w+)/static/ { 
     root /home/www-data/web2py/applications/; 
} 

とnginxの設定ファイルを設定した場合、それは、アクセス制御をバイパスし、そして誰もが静的コンテンツを見ることができないのだろうか?この行を設定ファイルから離しておくと、web2pyは静的なコンテンツをログインしているユーザに共有します(おそらく少し遅くなります)。

答えて

1

はい、そのnginxルールを使用するとweb2pyをバイパスします。これはweb2pyのマニュアルから直接であるとして、それを削除し、静的web2pyのハンドル/をさせる/、どちらかあまり変わりません。

http://127.0.0.1:8000/a/static/filename を「静的」と呼ばれる何のコントローラはありません。 web2pyは、これをアプリケーション "a"のサブフォルダ "static"の "filename"というファイルの要求として解釈します。 静的ファイルがダウンロードされると、web2pyはセッションを作成せず、クッキーを発行したりモデルを実行したりしません。

コントローラがないため、静的コンテンツにauth.requires_login()を直接使用することはできません。これは、/ static /にあるファイルは一般的にアクセス制御されていないため、ブラウザがウェルカムまたはログインページのレンダリングに必要なcss、jsなどを取得できないためです。

しかし、あなたはまだ(すなわちプライベートpdfファイル)静的ファイルにサイト全体のアクセス制御をしたい場合は、そのようにそれを行うことができます。アプリケーションディレクトリ内

  • private_static
  • というフォルダを作成しますお使いのコントローラで

その後、次の行を追加します。

#default.py 
import os 

auth.requires_login() 
def private_static(): 
    filename = os.path.join(*request.args) 
    allowed = ['private1.pdf', 'private2.pdf'] # have some kind of validation for security! 
    if not filename in allowed: 
     raise HTTP(404) 
    return response.stream(open(os.path.join(request.folder, 'private_static', filename))) 

とあなたで次のようなビュー何か:

<a href="{{=URL('private_static', args=['private1.pdf'])}}">Private Document</a> 

今すぐ静的なファイルを取得する前にログインするユーザーを強制しますhttp://.../private_static/private1.pdfにアクセスします。

関連する問題