web-dev-qa-db-ja.com

ユーザーがサービスを使用してログインしていることを確認できますか

外部のPHPスクリプトをDrupal 7.と統合することができるようにする必要があります。ただし、スクリプトもMySQLデータベースに接続するため、 bootstrap.inc、つまり Services モジュールの使用を検討しています。これにより、ユーザーがDrupalにログインしているかどうかを確認でき、ログインしている場合はユーザーの詳細を取得できますか?もしそうなら、あなたはこれがどのように行われることができるか私に見せていただけませんか?.

また、同じホスト上のスクリプトからのみアクセスできるようにサーバー/サービスを保護することは可能ですか?

1
Andy

サービスモジュールはエンティティシステムで機能するので、メール、ユーザー名などのユーザーデータをすぐに取り出せるはずです。サービスモジュールがユーザーデータについての手掛かりを送っているかどうかはわかりませんユーザーはオンラインかどうかにかかわらず、Services for Userエンティティの読み取り機能を変更して現在のセッションをクエリして返す小さなカスタムコードを追加できます。以下のコードサンプルを参照してください。

プロセスで必要になる可能性がある機能のカップルは次のとおりです。

// you can alter the resources object and use your own 
hook_services_resources_alter()

// implement it as below in your custom module
function YOURMODULE_services_resources_alter(){
  $resources['user']['retrieve']['callback'] = '_YOURMODULE_api_user_resource_retrieve';
}

// then implement the retrive
function _YOURMODULE_api_user_resource_retrieve($uid){
    $account = user_load($uid);
  if (empty($account)) {
    return services_error(t('There is no user with ID @uid.', array('@uid' => $uid)), 404);
  }

  services_remove_user_data($account);
  // DO YOUR SQL TO CHECK IF USER IS ONLINE
  // _check_this_user_online($uid);

  // Everything went right.

  return $account;
}
2
heshanlk