アプリケーションでFOSUserBundleを使用しています。 HTTPサービスを介して2つのことをしたいと思います。
パスワードを確認してください。サービスは次のようになります(パスワードは暗号化されません):
public function checkPasswordValidity($userId, $password) {
$user = $this->getDoctrine()
->getRepository('MyCompany\UserBundle\Entity\User')
->find($userId);
if (specialFunction($user , $password))
echo 'Valid Password';
else
echo 'Invalid Password';
}
別のHTTPサービスを介して新しいユーザーを作成します。パラメータは、ユーザー名とパスワードになります。
パスワードを確認してください:
$encoder_service = $this->get('security.encoder_factory');
$encoder = $encoder_service->getEncoder($user);
$encoded_pass = $encoder->encodePassword($password, $user->getSalt());
//then compare $user->getPassword() and $encoded_pass
新しいユーザーを作成します。
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setUsername($login);
$user->setPlainPassword($pass);
...
$userManager->updateUser($user);
私の作品:
$encoder_service = $this->get('security.encoder_factory');
$encoder = $encoder_service->getEncoder($user);
if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt()) {}
2番目の質問はテストしていませんが、すでに 回答済み だと思います。
ログインphpmyadmin、アクセスfos_user_userテーブル、[挿入]> [フィールドの入力]、[ユーザー名]、[メール]、[ロール]などをクリックします。
このphpスクリプトを使用してソルトとパスワードを生成します。
<?php
$salt = base_convert(sha1(uniqid(mt_Rand(), true)), 16, 36);
echo "Salt used: " . $salt ."<br/>";
echo "<br/>";
$password = 'adminpasswordhere';
$salted = $password.'{'.$salt.'}';
$digest = hash('sha512', $salted, true);
for ($i=1; $i<5000; $i++) {
$digest = hash('sha512', $digest.$salted, true);
}
$encodedPassword = base64_encode($digest);
echo "Password used: " . $password ."<br/>";
echo "<br/>";
echo "Encrypted Password: " . $encodedPassword ."<br/>";
?>