web-gelistirme-sc.com

Kullanıcılardan şifre almadan giriş yapma

Benim gereksinimim Facebook tarafından giriş gibi bir şey, bu yüzden kullanıcı şifre sağlamaz, ancak giriş yapar. Ben onun user id and/or username but not password Bilerek uzantı kodundan giriş yapan bir kullanıcı yapmak istiyorum.

Bunu nasıl yaparım? Ayrıca veritabanından kullanıcının şifreli şifresini almak ve oturum açma () yöntemine kullanıcı adı ve bu şifre koymak çalıştı ve sonra bir şey ters gitti, username and password mismatch error, Giriş olmasına rağmen!

Ayrıca googling'den bazı kodlar buldum -

JPluginHelper::importPlugin('user');
$options = array();
$options['action'] = 'core.login.site';
$response->username = "user_name_here";
$result = $app->triggerEvent('onUserLogin', array((array)$response, $options));

Çalışıyor gibi görünüyor, ancak bunu 2.5 ve 3.0 sürümlerinde yaparken daha sonra yanlış olma şansı olup olmadığını bilmiyorum.

6
dev-m

Bildiğim kadarıyla, bunun hiçbir parçası kullanımdan kaldırıldı, bu nedenle bu kod kesinlikle 2.5 ve 3.0 kurulumlarında düzgün çalışmaya devam etmelidir. Bir şey kullanımdan kaldırılsa bile, bunu en azından 4.0 sürümü ile çalıştırabilmelisiniz.

Bununla birlikte, bu parçaların hiçbirinin çıkarılması muhtemel değildir. Kullanıcı eklentilerini içe aktarıyor ve ardından onUserLogin olayını tetikliyorsunuz. Bu, eklentileri tetiklemek için standart yöntemdir, bu nedenle bir süre tutarlı olmalıdır.

Hatırlanması gereken diğer tek parça, bir kullanıcının parolasıyla oturum açmasını zorunlu kılmanın güvenliğini zayıflatmanızdır. Değiştirmek için kullandığınız parçanın da güvenli olduğundan emin olun.


Yorum başına güncelleme

triggerEvent çağrısı farklı kullanıcı eklentileri üzerinden (plugins/user/ ve varsa onUserLogin yöntemini çağırır. Temel işlev, joomla eklentisindeki işlevdir. Aşağıdaki tüm işlevi kopyalıyorum:

public function onUserLogin($user, $options = array())
{
    $instance = $this->_getUser($user, $options);

    // If _getUser returned an error, then pass it back.
    if ($instance instanceof Exception)
    {
        return false;
    }

    // If the user is blocked, redirect with an error
    if ($instance->get('block') == 1)
    {
        $this->app->enqueueMessage(JText::_('JERROR_NOLOGIN_BLOCKED'), 'warning');

        return false;
    }

    // Authorise the user based on the group information
    if (!isset($options['group']))
    {
        $options['group'] = 'USERS';
    }

    // Check the user can login.
    $result = $instance->authorise($options['action']);

    if (!$result)
    {
        $this->app->enqueueMessage(JText::_('JERROR_LOGIN_DENIED'), 'warning');

        return false;
    }

    // Mark the user as logged in
    $instance->set('guest', 0);

    // Register the needed session variables
    $session = JFactory::getSession();
    $session->set('user', $instance);

    // Check to see the the session already exists.
    $this->app->checkSession();

    // Update the user related fields for the Joomla sessions table.
    $query = $this->db->getQuery(true)
        ->update($this->db->quoteName('#__session'))
        ->set($this->db->quoteName('guest') . ' = ' . $this->db->quote($instance->guest))
        ->set($this->db->quoteName('username') . ' = ' . $this->db->quote($instance->username))
        ->set($this->db->quoteName('userid') . ' = ' . (int) $instance->id)
        ->where($this->db->quoteName('session_id') . ' = ' . $this->db->quote($session->getId()));
    $this->db->setQuery($query)->execute();

    // Hit the user last visit field
    $instance->setLastVisit();

    return true;
}

Bu eklenti şifreyi hiç kontrol etmez (kimlik doğrulama eklentileri tarafından yapılır). Bu, çoğunlukla kullanıcının engellenmediğini kontrol eder ve kullanıcının verilerini oturuma ayarlamadan önce giriş yapabilir.

Bu oturum depolama alanı, kullanıcı oturum açmış olarak göstermenin anahtarıdır. Doğal olarak bu kodu doğrudan kullanabilirsiniz, ancak aslında bu eklentinin kullanıcının engellenmediğini kontrol etme, depolama işini yapmasına izin vermekten çok daha karmaşık olurdu oturumdaki bilgileri ve son ziyaret zamanını işaretleme.

4
David Fritsch

Bunu değiştirirseniz çalışır:

 JPluginHelper :: importPlugin ('kullanıcı'); 
 $ Options = dizi (); 
 $ Options ['action'] = 'core.login.site'; 
 $ response = dizi (); // Bu satırı ekleyin 
 $ Response ['language'] = ""; // Bu satırı ekleyin 
 $ Response ['username'] = "kullanıcı_adı_bura"; // Bu satırı değiştirin 
 $ Sonuç = $ app-> triggerEvent ('onUserLogin', dizi ((dizi) $ yanıt, $ seçenekler)); 
0
Alireza Balvardi