У меня есть другое приложение, которое отправляет мне хешированный пароль, и я пытаюсь получить прямой вход в свое приложение, как только получаю его, но функция Yii Login использует переменную _identity, которая проверяет имя пользователя и неуправляемый пароль. Кто-нибудь знает об этом, чтобы я мог получить прямой логин? Это мой пример кода:
public function actionPortalLogin()
{
$model=new LoginForm;
$model->username = 'username';
$model->password = 'randomHashedPassword';
$model->Login();
if (Yii::app()->user->returnUrl == "/myapp/index.php") {
$this->redirect("/myapp/index.php/home/userHome");
}
else {
$this->redirect(Yii::app()->user->returnUrl);
}
}
public function Login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->username,$this->password);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
else
return false;
}
Довольно просто. В идеале, вместо первых нескольких строк, я бы получил имя пользователя и перешел из другого приложения, а затем смог бы выполнить вход в систему, используя мое собственное приложение, но, как я уже сказал, это, похоже, не работает. Кто-нибудь знает какие-либо обходные пути для этого или, может быть, способ, которым yii может проверять хэшированные пароли и использовать его для входа в систему без необходимости расшифровать его?
Благодарю.
Если вы хотите отправить зашифрованный пароль, вам необходимо будет расшифровать его до идентификации пользователя.
$model = new LoginForm;
$mode->password = LoginForm::decryptPassword('encrypted password value here');
Решения по шифрованию и расшифровке вы найдете там:
Двустороннее шифрование: мне нужно хранить пароли, которые можно получить
Лучший способ использовать PHP для шифрования и дешифрования паролей?