2014-10-15 4 views
1

Я хочу аутентифицировать пользователя без использования пароля. Так IsValid() должен быть установлен верно как-то без использования setIdentityValue (имя пользователя), setCredentialValue (пароль) и аутентификацию().Аутентификация ZF2 без пароля

Как успешно пройти аутентификацию без имени пользователя/пароля?

Звучит странно, но в этом случае веб-сервер обрабатывает аутентификацию (SAML). Каждый пользователь, которому предоставил доступ веб-серверу, должен автоматически получить доступ к веб-сайту. Мне нужна аутентификация ZF, так как также возможен доступ к веб-сайту с именем пользователя/паролем.

ответ

1

Прадипе почти дал ответ. Результат должен быть массивом, как в примере ниже.

use Zend\Authentication\Adapter\AdapterInterface; 
use Zend\Authentication\Result; 

class NoPasswordAuthAdapter implements AdapterInterface 
{ 
    protected $identity; 

    public function setIdentity($identity) 
    { 
    $this->identity = $identity; 

    return $this; 
    } 

    public function authenticate() 
    { 
    return new Result(
     Result::SUCCESS, 
     $this->identity, 
     array('Authentication successful.') 
    ); 
    } 
}

Благодарим за помощь.

0

Когда приступила аутентификация ZF, вы должны указать имя пользователя и пароль в качестве учетных данных для адаптера. , который должен быть позже перешел на authenticate($adapter). Так как ваше требование не предоставлять никаких учетных данных и установить isValid() == true, , вам нужно вручную выполнить жесткое кодирование определенных учетных данных из вашей БД на каждый запрос пользователя. Вот пример из ZF2 authentication:

use Zend\Authentication\AuthenticationService; 

    // instantiate the authentication service 
    $auth = new AuthenticationService(); 

    // Set up the authentication adapter 
    $authAdapter = new My\Auth\Adapter($username, $password); 

    // Attempt authentication, saving the result 
    $result = $auth->authenticate($authAdapter); 

    if (!$result->isValid()) { 
    // Authentication failed; print the reasons why 
     foreach ($result->getMessages() as $message) { 
     echo "$message\n"; 
     } 
    } else { 
    // Authentication succeeded; the identity ($username) is stored 
    // in the session 
    // $result->getIdentity() === $auth->getIdentity() 
    // $result->getIdentity() === $username 
    } 
2

Вы можете создать свой собственный класс адаптера, чтобы сделать фиктивную аутентификацию.

class DummyDBAuthAdapter implements Zend\Authentication\Adapter\AdapterInterface 
{ 
    public function authenticate() 
    { 
     return Zend\Authentication\Result::SUCCESS; 
    } 
} 

Таким образом, всякий раз, когда пользователь аутентифицируется с помощью SAML, вы можете переключиться на этот адаптер с вашего адаптера DB.