web-dev-qa-db-ja.com

成功したregister.jsonの応答を編集するにはどうすればよいですか?

成功したregister.jsonのサービスのjson応答を編集して、ユーザーのORシステムの自動生成されたパスワードとトークンを含めるにはどうすればよいですか?

以下のコメント付きコードのさまざまな組み合わせを試しました。

function logintoboggan_process_login($account, &$edit, $redirect = array()){
  global $user;

  $user = user_load($account->uid);
  watchdog('login debug', json_encode($edit)); // AT THIS POINT I CAN VERIFY WE HAVE THE PLAIN-TEXT PASSWORD
  //user_login_submit(array(), array('uid' => $account->uid));
  user_login_finalize($edit);  
//  $user = user_load($account->uid);
//  $user->token = drupal_get_token('services'); //WE HAVE A TOKEN ALTHOUGH I DOUBT THIS WOULD WORK.
//  user_login_finalize($edit);
//  module_invoke_all('hook_user_login');
//  module_invoke_all('tripchi_user_login');
//  module_invoke_all('logintoboggan_user_login');

「= modules/user/user.module」の3888行目のdrupalコアのハッキングも試みました。

elseif (!$admin && !variable_get('user_email_verification', TRUE) && $account->status) {
      global $user;    
      $user = user_load($account->uid);
      watchdog('login debug', json_encode($edit));  // AT THIS POINT I CAN VERIFY WE HAVE THE PLAIN-TEXT PASSWORD AND TOKEN AVAILBABLE!
      //user_login_submit(array(), array('uid' => $account->uid));
      user_login_finalize($edit);  
    //  $user = user_load($account->uid);
    //  $user->token = drupal_get_token('services'); //WE HAVE A TOKEN ALTHOUGH I DOUBT THIS WOULD WORK IN TERMS OF SESSION PERSISTANCE
    //  user_login_finalize($edit);
    _user_mail_notify('register_no_approval_required', $account);
    $form_state['uid'] = $account->uid;
    user_login_submit(array(), $form_state);
    drupal_set_message(t('Registration successful. You are now logged in.'));
    $form_state['redirect'] = '';
  }

私のテスト行の1つがコールを完全に中断しない場合、コールは成功して応答します。

{
    "uid": "499",
    "uri": "http://localdrupal.tripchi.com/drupalgap/user/499"
}
1
E.A.T

Logintoboggan /ユーザーモジュール自体をハッキングしないと、生のテキストパスワードを取り戻すことはできませんでした(私の質問に示されているものと同様です)。

しかし、私は services_token_access モジュールを使用して、サービス/ API呼び出しの登録時に即時ログインを提供するという同じ目的を解決しました。このコードは成功登録にフックするだけで、services_tokenをレスポンスにアドバタイズします。これは現在、クライアントが検証に必要な唯一のものです。

function HOOK_services_request_postprocess_alter($controller, $args, &$result) {

if ( gettype($result) == 'array' && isset($result['uri']) && isset($result['uid'])) { // THIS CONDITION MATCHES THE DEFAULT RESPONSE OF A SUCCESSFUL REGISTRATION. 
        $user = (object)$result;
        $user = user_load($user->uid);
        $user = HOOK_services_account_object_alter($user);
        $result = array('token'=>$user->services_token, 'user'=>$user);
    }
    return $result;
}


function HOOK_services_account_object_alter(&$user) {
    $user->services_token = services_token_access_update_token($user->uid, FALSE); // essential for logging in later
    $user->specialstuff = 'whatever else you need';
    return $user;
}

(services_token_accessモジュールは特に人気がなく、ほとんどサポートされていませんが、私にとってはうまくいきました。)

2
E.A.T