2

セッションが期限切れになった場合(ログアウトしたがページが更新されていない場合)にユーザーがフォームを開かないようにするために、ユーザーがまだログインしていることを確認する必要があります。

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

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

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

2 に答える 2

5

Ajaxリクエストの結果としてページ全体をリダイレクトする場合は、サーバー側のリダイレクト(Ajaxリクエスト自体のみをリダイレクトする)ではなく、クライアント上のJavascriptを介してリダイレクトする必要があります。これを実現するには、関数のターゲットとして「:eval」を指定できます。ajax()これにより、返される応答がJavascriptコードとして実行されます(ここを参照)。だから、次のようなもの:

$('#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を返します。

また、この関数はサーバー側のPython関数であるため、クライアント側のJavascript関数である関数URL()内で呼び出すことはできません。ajax()代わりに、Web2pyのテンプレート区切り文字({{ }})内に配置して、サーバー上のテンプレートにURLが生成されるようにする必要があります。

更新:代わりに:

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

これで、次のことができます。

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

これは舞台裏でも同じことをします。

于 2012-04-25T21:23:34.870 に答える
2

また、これは役立つかもしれません:

{{if auth.is_logged_in():}}
于 2012-07-23T20:22:51.887 に答える