0

jQuery mobile と PhoneGap を使用してアプリを作成しました。このアプリは、ajax と Wordpress json プラグインを使用して、Wordpress Web サイトからコンテンツをフェッチします。

今、アプリの機能を拡張して、ユーザーがコンテンツを更新できるようにしたいと考えています。

このためには、ワードプレスにログインする必要があります。

私は次のように動作するつもりです:

  1. ajax を使用してクライアントからサーバーに送信されるユーザー名とパスワード
  2. サーバーからクライアントにトークンを返す
  3. トークンをクライアントに保存 (ローカル ストレージ)
  4. 各リクエストでそのトークンをサーバーに送信し、サーバー側で検証します。

編集: これまでのところ、トークンを作成して返すためにこれを取得しました:

add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );
add_action( 'wp_ajax_priv_ajaxlogin', 'ajax_login' );


function ajax_login(){

    $info = array();
    $info['user_login'] = $_POST['username'];
    $info['user_password'] = $_POST['password'];
    $info['remember'] = true;

    $user = wp_signon( $info, false );
    if ( is_wp_error($user) ){
        echo json_encode(array('loggedin'=>false, 'message'=>__('Invalid username or password.')));
    } else {

        $expiration = $expire = time() + (14 * 24 * 60 * 60);

        $pass_frag = substr($user->user_pass, 8, 4);

        $key = wp_hash($user->user_login . $pass_frag . '|' . $expiration, $scheme);
        $hash = hash_hmac('md5', $user->user_login . '|' . $expiration, $key);

        $token = $user->user_login . '|' . $expiration . '|' . $hash;


        echo json_encode(array('loggedin'=>true, 'token'=>$token, 'message'=>__('Login successful...')));

    }

    die();
}

そしてこれはトークンを検証するために:

function token_auth($token){

    list($username, $expiration, $hmac) = $token;

    $expired = $expiration;

    // Allow a grace period for POST and AJAX requests
    if ( defined('DOING_AJAX') || 'POST' == $_SERVER['REQUEST_METHOD'] )
        $expired += HOUR_IN_SECONDS;

    // Quick check to see if an honest cookie has expired
    if ( $expired < time() ) {
        return false;
    }

    $user = get_user_by('login', $username);
    if ( ! $user ) {
        return false;
    }

    $pass_frag = substr($user->user_pass, 8, 4);

    $key = wp_hash($username . $pass_frag . '|' . $expiration, $scheme);
    $hash = hash_hmac('md5', $username . '|' . $expiration, $key);

    if ( $hmac != $hash ) {
        return false;
    }

    if ( $expiration < time() ) // AJAX/POST grace period set above
        $GLOBALS['login_grace_period'] = 1;

    return true;

    wp_set_current_user( $user->ID );


}

そして、jsは次のとおりです。

$('form#login').submit( function(e){
                    $('form#login p.status').show().text('Sending user info, please wait...');
                    $.ajax({
                        type: 'POST',
                        dataType: 'json',
                        url: 'http://example.com/wp-admin/admin-ajax.php',
                        username: $('form#login #username').val(),
                        password: $('form#login #password').val(),
                        data: { 
                            'action': 'ajaxlogin',
                            'username': $('form#login #username').val(), 
                            'password': $('form#login #password').val() },
                        success: function(data){
                            $('form#login p.status').text(data.message);
                            if (data.loggedin == true){
                                $.mobile.changePage( "/blog.html", { changeHash: false });
                            }
                        }
                    });
                    e.preventDefault();
                });

まだ作業中です。

誰かが https を使用していない場合にパスワードを暗号化する方法はありますか?

4

2 に答える 2

0

wp_set_auth_cookie( $user->ID );後続のすべてのリクエストで使用される認証 Cookie を設定するには、ログインが成功した場合に使用する必要があります。

于 2014-03-20T06:21:37.787 に答える
0

いくつかの新しい URL を定義するカスタム プラグインを作成します。URL / 関数の 1 つは、ログインして有効なトークンを返すことです (有効なログインの場合)。もう 1 つの URL/機能は、トークンがまだ有効であることを検証することです。

それを独自のカスタム プラグインとして使用することで、この目的のために使用できる個別の役割/機能を作成するオプションもあります...細分性が必要な場合。

于 2013-10-21T16:32:16.100 に答える