2012-04-25 6 views
2

セッションが期限切れ(ログアウトしてもページが表示されていない)してもフォームを開くことができないように、ユーザーがまだログインしていることを確認する必要があります。リフレッシュ)。web2pyのViewからログイン状態を動的にチェックする方法

ここでは、私がやろうとしていた疑似コードがありますが、明らかに機能しません。

// some view.html 
$('#someform').click(function() { 
    ajax(URL('login_status'), [], ''); 
}); 

// some controller.py 
def login_status(): 
    if not auth.user: 
     redirect('index') 

答えて

3

あなたは完全なページがAjaxリクエストの結果としてリダイレクトしたい場合は、クライアント上ではなく、サーバー側のリダイレクトを経由してJavaScriptでそれを行う必要があるでしょう(のみのAjaxをリダイレクトします要求自体)。そのようにするには、ajax()関数でターゲットとして ":eval"を指定すると、返されたレスポンスがJavascriptコードとして実行されます(here参照)。だから、のようなもの:

$('#someform').click(function() { 
    ajax("{{=URL('default', 'login_status')}}", [], ':eval'); 
}); 

// some controller.py 
def login_status(): 
    if auth.user: 
     return 'this.show()' # or appropriate Javascript code to show the form 
    else: 
     return 'window.location = "%s"' % URL('default', 'index') 

だから、Ajax呼び出しは、フォームを示したり、ユーザーがログインしているかどうかに応じて、ページのリダイレクトのどちらかというJavascriptを返し

また、URL()関数であることに注意してください。サーバーサイドのPython関数であるため、クライアントサイドのJavaScript関数であるajax()関数内で呼び出すことはできません。代わりに、URLをweb2pyのテンプレートデリミタ({{ }})に入れて、サーバ上のテンプレートにURLを生成する必要があります。あなたが今できること

return 'window.location = "%s"' % URL('default', 'index') 

UPDATE:代わりに、舞台裏でも同じことを行います

redirect(URL('default', 'index'), client_side=True) 

+0

!感謝アンソニー。 – profitehlolz

2

また、これは助けになるかもしれません:

スポットをヒット
{{if auth.is_logged_in():}} 
+0

これは、ページがブラウザに最初に戻されたときに役立ちますが、ページがロードされた後でログイン状態が変更された場合は更新されません。 – Anthony

関連する問題