web-dev-qa-db-ja.com

プログラムでajaxを使用してログインする

カスタムモジュールにボタンがあります

  function sign_up_form_user_register_form_alter(&$form, &$form_state, $form_id) {
    $form['captcha']['#suffix'] ='<input type="button" id="test" name="test" value="OK">';

    $form['#attached']['js'][] = array
      (
       'type' => 'file',
       'data' => drupal_get_path('module', 'sign_up') . '/js/sign_up.js',
    );

         $form['actions']['submit'] = array("#type" => "submit", "#value" => "Create Account", 
        "#ajax" => array(
        "wrapper" => "formwrapper", "effect" => "fade", "method" => "replace",));
   }

注:ページの更新を回避するために、#ajaxのコールバックキーを削除しました。

私のsign_up.jsでは、このボタンがクリックされたときにajax呼び出しを行いました。

  $(function() {

      $("#test").click(function(){

         $.ajax({url:"/path/to/normalphp/page/userLogin.php",success:function(response){

          alert(response);


      }});
    });
  });

Onclickは機能しており、ajax呼び出しも成功しています。

私のuserLogin.php(モジュールfile.Normal phpファイルではありません)では、uidをハードコードしてuser_login_submit()を呼び出します。

<?php

 chdir($_SERVER['DOCUMENT_ROOT'].'/');
 define('DRUPAL_ROOT', getcwd());
 //Load Drupal
 require_once './includes/bootstrap.inc';
 drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 


  $account = array('uid' => 49); //existing uid
  user_login_submit(array(), $account);

私が期待する結果は、自動的にユーザーをようこそ画面にリダイレクトすることですが、これは発生していません。drupalログインページからこのユーザーでログインしようとすると、これは成功です。登録画面をカスタマイズし(ajax呼び出し、jquery検証など)、テストが成功するとウェルカム画面に自動的にリダイレクトするようにテストしました。注:drupal電子メール通知が必要ない場所です。誰かが私を助けてくれますか?

2
wilNev

JQuery AJAXを使用する代わりに、 Drupal Form API AJAX でこれを実現できます。

Hide_)を使用してhook_form_alterで実際の送信ボタンを非表示にして、AJAXコールバックでカスタムボタンを追加できます。

または、jQuery AJAXを使用してこれを練習したい場合は、Drupalの処理方法AJAX呼び出しは少し異なります。最初にDrupalの hook_men を理解する必要があるかもしれません。このシステムを明確に理解している場合は、このフックを使用してページを作成する必要があります。drupalでは、AJAXコールバックを処理するためのカスタムphpファイルを作成することはお勧めしません。代わりに、ページを作成できますhook_menuを使用して、そこでサーバーコールバックを処理します。JSパーツの場合、Drupalを使用する方法は Drupal Behaviors です。

これはどのように見えるかの小さな例です。

処理するカスタムモジュールAJAXログイン(sign_up.module)

<?php
function sign_up_menu {
    $items = array();
    $items['custom/user-login'] = array(
        'page callback' => 'custom_user_login_callback',
        'type' => MENU_CALLBACK,
        'access callback' => TRUE
    );
    return $items;
}
function custom_user_login_callback(){
    /**
     *  You can validate the User credentials here and provide error message for invalid credentials or send him to welcome page using drupal_goto() for valid credentials
    **/
}

-

カスタムJSファイル(sign_up.js)

Drupal.behaviors.customSignUp = {
    attach: function(context, settings) {
        $("#test", context).once(function(){
            $(this).click(function(){
                $.ajax({
                      url: Drupal.settings.basePath + 'custom/user-login',
                      type: 'POST',
                      data: {
                        username: /** Pass the User Name **/
                        password: /** Pass the Password **/
                      },
                      success: function(response) {
                        $('#ajax-response-wrapper').html(response);
                        Drupal.attachBehaviors();
                      }
                });
            });
        });
    }
};
2
Immanuel Paul