2016-07-06 8 views
1

パスワードなしでwordpressユーザーにログインします。これは私が欲しいものです。 ユーザーがhttp://example-site.com/6789098765678.phpを訪問し、彼のユーザー名を入力するとパスワードなしで自動的にログインします。パスワードなしでWordPressユーザーをログに記録するには

私はwp_set_auth_cookieのようなものを試しましたが、どこに配置するのかわかりません。私はRuby on Railsの背景から来て、PHPに関する知識はほとんどありません。

この動作は安全ではないことがわかります。具体的な使用例です。

+0

デフォルトでは、wordpressはあなたが探している機能を提供していません。これを可能にするための最良の方法は、独自のプラグインを作成してプラグインをusersテーブルに接続してから、ユーザー名のみのカスタムログインフォームを作成することです。ユーザーの元のパスワードをusermetaに保存してください(塩漬けされハッシュされたパスワードではありません)。ユーザー名に基づいてusermetaからパスワードを取得し、そのパスワードとユーザー名をwordpress login関数に送信します。これによりユーザーがログインし、セッションが設定されます。 –

+0

@ArshSinghこれはどうやってできますか? http://wordpress.stackexchange.com/questions/53503/can-i-programmatically-login-a-user-without-a-password –

+0

これを使用する場合は、http://wordpress.stackexchangeをチェックしましたか? .com/a/128445/66430 –

答えて

2

コメント内に投稿した回答は、次のように使用できます。

これを可能にするために必要なものは次のとおりです。私たちがユーザー名でのみユーザーログインに使用するwordpress関数用にajax hooksを作成し、その関数にjQuery ajax呼び出しを行います。

最初に行う手順は次のとおりです。wp-content/themes/your_theme_name/functions.phpというファイルを開き、ファイルの最後に次のコードを追加します。

function username_login(){ 
// Automatic login // 
$username = $_POST['username']; 
$user = get_user_by('login', $username); 



// Redirect URL // 
    if (!is_wp_error($user)) 
    { 
     wp_clear_auth_cookie(); 
     wp_set_current_user ($user->ID); 
     wp_set_auth_cookie ($user->ID); 

     $redirect_to = user_admin_url(); 
     echo json_encode(array('error_code'=>0)); 
     exit(); 
    } else { 
     echo json_encode(array('error_code'=>1)); 
     exit(); 
    } 
exit(); 
} 
add_action('wp_ajax_username_login','username_login'); 
add_action('wp_ajax_nopriv_username_login','username_login'); 

あなたが見ることができるように、我々はAjaxのコントローラから当社username_login機能にフックするadd_action機能を使用している、私たちはここに必要な次のステップはへのAJAX呼び出しを行うために、よりおよそwordpress hooks here

を読みます私たちが作成し、ユーザーのログインをして、ユーザーがログインしたときにサイトを更新する機能です。必要なのは、次のコードを使用してWordpressにログインするユーザーに要求を送信することです。私たちは今、何をする必要があるか、あなたはjavascriptのコードの上で見ることができるように、我々は、フォームセレクタがusername_loginと呼ばれている

jQuery('#username_login').on('submit',function(e){ 
    e.preventDefault(); 
    var data = $(this).serializeArray(); 
    data.push({ name:'action',value:'username_login' }); 
    $.ajax({ 
     url:"<?php echo admin_url('admin-ajax.php'); ?>";, 
     type: 'POST', 
     dataType: 'json', 
     data:data, 
     success:function(response){ 
      if(response.error_code == 1){ 
       alert('user cannot login') 
      } else { 
       alert('user logged in'); 
       location.reload(); 
      } 
     } 
    }); 
}); 

wp-content/themes/your_theme_name/とオープンfooter.phpの内側に配置され、あなたのfooter.phpファイルに以下のコードを追加します。これはこの流れで動作するように起こっているか、今、あなたはすべてを持っていることを

<form id="username_login"> 
    <input type="text" name="username" placeholder="Your username..." required/> 
    <button type="submit" name="submit">Login</button> 
</form> 

:ID username_loginと、それは我々がボタンタイプsubmitusernameという入力を作成する必要が内部でフォーム要素を作成しているのですか? 。ユーザーがユーザー名を入力してログインすると、yoursite.com/wp-admin/admin-ajax.php?action=username_loginというパラメータにactionというAjaxリクエストが送信され、ユーザーがログインしたときにユーザーがログオンすると、ユーザーがログインしてからユーザー通常のユーザーの機能に問題なくアクセスできます。

+0

私の質問に答える時間をありがとう。これは1つのアプローチですが、簡単なアプローチはここにコードを貼り付けることです:http://wordpress.stackexchange.com/questions/53503/can-i-programmatically-login-a-user-without-a-password/128445#いくつかのPHPファイルで 'require(dirname(__ FILE__)。 '/wp-load.php');を行頭に追加してください。それは簡単な回避策です:D –

+0

これは仕事をする一つの方法であるので、アップアップして受け入れます。しかし、私は前に指定した回避策を使用しました。 –

+1

あなたの回避策も良いです、私が投稿したもの、それはあなたが何かよりダイナミックなものを作り、JavaScriptに基づいて作成する必要があるためです。あなたはそのようにすることができます。 –

関連する問題