2

joomlaサイトにログインするためのファイルです。

// a super-stripped down 2-leg oauth server/client example
function getLogin($userid, $psswrd) {
    $app = JFactory::getApplication();
    jimport('joomla.user.authentication');
    jimport('joomla.session.session');
    $auth = &JAuthentication::getInstance();
    $session = &JFactory::getSession();
    $session->set('name', "value");
    $ssn_name = $session->get('name');
    $sessionDetails = array(
            'State' => $session->getState(),
            'Expire' => session->getExpire(),
            'Token' => $session->getToken(),
            'FormToken' => $session->getFormToken(),
            'Name' => $session->getName(),
            'Id' => $session->getId(),
            'getStores' => $session->getStores(),
            'isNew' => $session->isNew());

    $username = $userid;
    $password = $psswrd;
    $credentials = array(
            'username' => $username,
            'password' => $password);
    $options = array();
    $response = $auth->authenticate($credentials, $options);

    if ($response->status == JAUTHENTICATE_STATUS_SUCCESS) {
        $response->status = true;

        $sessionDetails['loginStatus'] = $loginStatus = $app->login($credentials, $options);

        return $sessionDetails;
    }
    else {
        $response->status = false;
        return 'testFalse';
    }
}

これで、localhost を使用してこれを呼び出しています。

$client = new nusoap_client("http://domain-name/site-name/nusoap/remoteLogin.php");

$error = $client->getError();
if ($error) {
    echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
}

$result = $client->call("getLogin", array(
        "userid" => "admin",
        "password" => "test"));

このセッションが上記のプロジェクトで作成された後、データベースで新しいエントリで更新します。しかし、まだサイトにログインしていません。誰でも私を助けることができますか?

ありがとう

4

2 に答える 2

1

こんにちは@Devjohn私のURLを確認してください。ローカルの簡単なリモートソープアクセス方法をテストできます。

あなたはここで私のボルグ・トゥ・ユーの問題を見つけることができます。

http://phptechnicalgroups.blogspot.in/2012/10/json-return-using-soap-server-and-soap.html

于 2013-11-20T13:08:26.690 に答える
1

OK、Brent Friar が投稿し、elin が引用したように、次のことを行う必要があります。

  • 新しいセッションを作成し、関連付けられたトークンを取得します
  • ユーザー名、パスワード、およびトークンを渡して、ログイン セッションを作成します。
  • ログイン セッションの新しい Cookie 値を取得する
  • クッキーをブラウザに転送する

これらすべてを達成するために必要なコードは次のとおりです。

<?php
$uname = $_POST['username'];
$upswd = $_POST['password'];
$url = "http://joomla website.com";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_HEADER, TRUE );
$ret = curl_exec($ch);
if (!preg_match('/name="([a-zA-z0-9]{32})"/', $ret, $spoof)) {
    preg_match("/name='([a-zA-z0-9]{32})'/", $ret, $spoof);
}

// POST fields
$postfields = array();
$postfields['username'] = urlencode($uname);
$postfields['passwd'] = urlencode($upswd);
$postfields['option'] = 'com_user';
$postfields['task'] = 'login';
$postfields[$spoof[1]] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);

// Get logged in cookie and pass it to the browser
preg_match('/^Set-Cookie: (.*?);/m', $ret, $m);
$cookie=explode('=',$m[1]);
setcookie($cookie[0], $cookie[1]);
?>

これは、スクリプトで使用される URL がページにログイン フォームを持っている限り、どの Joomla Web サイトでも機能するはずです。このスクリプトを実行すると、Web サイトにアクセスしてログインできるようになります。

于 2014-11-26T07:58:22.427 に答える