1

xhr を介してクライアント側でプロセス全体を実行できるように、認証動作を変更したいと考えています。たとえば、ログイン フォームを送信すると、login_handler は、新しい HTML ページをロードしたり、何らかのリダイレクトを行ったりする代わりに、成功とエラーに関する json データを返します。これを行うには何を調べる必要がありますか?

4

3 に答える 3

2

識別子を取得してrememberメソッドを呼び出すことにより、独自のログインコントローラを作成できるはずです。

最初にデータベースからユーザーを取得し、パスワードを検証してから、すべてが正しい場合は、認証Cookieを設定できます。

response.headers = request.environ['repoze.who.plugins']['main_identifier'].remember(request.environ, {'repoze.who.userid':user_name})

また、UIの目的で成功したかどうかを確認する最後に、コントローラーからjsondictを返します。

于 2011-07-09T17:34:47.680 に答える
2

私はTG2でまったく同じことをしようとしていました。これは、amol からの回答を拡張したものです。私はそれを使用していますが、私にとってはうまく機能します。

@expose("json")
def login(self, login, password):

    identity = {"login": login,
                "password": password}

    # Authenticate the credentials
    username =  request.environ['repoze.who.plugins']['sqlauth'].authenticate(request.environ, identity)

    if username:
        print("Logged into " + username)
        # Remember this user
        response.headers = request.environ['repoze.who.plugins']['main_identifier'].remember(request.environ, {'repoze.who.userid':username})

        return {"status": True, "username": username}
    else:
        print("Could not authenticate")
        return {"status": False, "username": None}
于 2011-09-30T08:38:24.700 に答える
1

ユーザー名とパスワードを抽出し、それらをパラメーターとしてログイン スクリプトに送信すると、ユーザーを検証し、それに応じて結果を返すことができます。

$.ajax({
    url: "login.php",
    data: "username="+$("#username")+"&password="+$("#password"),
    method: 'GET',
    dataType: 'json',
    async: false,
    success: function(msg){
        if(msg.success){
            $("#content_area").html(msg.data);
        }
    }
});

スクリプトは次のようになります。

if( $_REQUEST['username'] == "correct_username" && $_REQUEST['password'] == "correct_password"){
     return json_encode( array( "success" => true, "data" => "stuff" ) );
}else{
     return json_encode( array( "success" => false ) );
}

ただし、プロセス自体にはセキュリティの問題と脆弱性がたくさんあるため、これに反対することをお勧めします. 資格情報をサーバーに安全に投稿し、Web サーバーがセッションを処理できるようにし、Cookie を設定し、適切に認証することで問題が解決できる場合は、そうしてみてください。

于 2011-03-28T07:45:55.357 に答える