0

JoomlaソースonUserAuthenticateで、API(google経由)では見つからなかったcaledメソッドを見つけましたが、その機能はonLoginUserに似ています...したがって、ログイン/パスワードチェックの後、次のコードを実行する必要があります。この関数。結果として、私は持っていますtrue/false-それに応じて、ユーザーの認証を完全に設定する必要があります。ユーザーのログイン/パスワードは正しいが、私のコードがfalse->認証失敗を返したとしても...

私は次のようなことを試みています:

functionon UserAuthenticate($credentials,$options,&$response){

  jimport('joomla.user.helper');

  $username=mysql_real_escape_string($credentials['username']);
  $password=mysql_real_escape_string(md5($credentials['password']));

  //my code returns $result

  if($result!=NULL){
    $response->status=JAUTHENTICATE_STATUS_SUCCESS;
    $response->error_message='';
  }
  else{
    $response->status=JAUTHENTICATE_STATUS_FAILURE;
    $response->error_message=JText::_('JGLOBAL_AUTH_INVALID_PASS');
  }
}
4

3 に答える 3

1

onUserAuthenticateは、メソッドではなくイベントです。プラグインを使用してJoomlaイベントをリッスンします。この場合、通常、ユーザープラグインがこれをリッスンします。イベントが発生すると、コードが実行されます。 http://docs.joomla.org/Plugin

于 2012-10-04T15:25:16.577 に答える
0

カスタムログインフォームでこれを試すことができます-

$app = JFactory::getApplication();
$data = array();
$data['return']     = '';
$data['username']   = JRequest::getVar('username', '', 'method', 'username');
$data['password']   = JRequest::getString('password', '', 'post', JREQUEST_ALLOWRAW);

// Get the log in options.
$options = array();

// Get the log in credentials.
$credentials = array();
$credentials['username'] = $data['username'];
$credentials['password'] = $data['password'];

// Perform the log in.
$error = $app->login($credentials, $options);

if (!JError::isError($error)) {
    $response->status=JAUTHENTICATE_STATUS_SUCCESS;
    $response->error_message='';                    
}else{
    $response->status=JAUTHENTICATE_STATUS_FAILURE;
    $response->error_message=JText::_('JGLOBAL_AUTH_INVALID_PASS');
}
于 2012-10-04T14:37:46.100 に答える
0

関数「onUserAuthenticate」でソリューションを認証する場合は、ユーザーの資格情報が有効かどうかを自分で確認する必要があります。次のコードを使用して行います。

   function onUserAuthenticate($credentials, $options, &$response)
   {
    $response->type = 'Joomla';
    // Joomla does not like blank passwords
    if (empty($credentials['password'])) {
      $response->status = JAuthentication::STATUS_FAILURE;
      $response->error_message = JText::_('JGLOBAL_AUTH_EMPTY_PASS_NOT_ALLOWED');
      return false;
    }

    // Initialise variables.
    $conditions = '';

    // Get a database object
    $db   = JFactory::getDbo();
    $query  = $db->getQuery(true);

    $query->select('id, password');
    $query->from('#__users');
    $query->where('username=' . $db->Quote($credentials['username']));

    $db->setQuery($query);
    $result = $db->loadObject();

    if ($result) {
      $parts  = explode(':', $result->password);
      $crypt  = $parts[0];
      $salt = @$parts[1];
      $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);

      if ($crypt == $testcrypt) {

        $user = JUser::getInstance($result->id); // Bring this in line with the rest of the system
        $response->email = $user->email;
        $response->fullname = $user->name;

        $response->status = JAuthentication::STATUS_SUCCESS;
        $response->error_message = '';

        print_r("You login correct Sir");
        die();        

      } else {
        print_r("you enter wrong credential");
        die();

        $response->status = JAuthentication::STATUS_FAILURE;
        $response->error_message = JText::_('JGLOBAL_AUTH_INVALID_PASS');

      }

    } else {

    print_r("you enter blank credential");
    die();
      $response->status = JAuthentication::STATUS_FAILURE;
      $response->error_message = JText::_('JGLOBAL_AUTH_NO_USER');

    }
      return true;
   }
于 2012-11-18T09:16:25.917 に答える