저는 젠드 프레임 워크 2를 처음 접했고 인증을 처리하는 가장 좋은 방법이 무엇인지 궁금합니다. 나의 현재 (일) 로그인 코드는 다음과 같습니다 젠드 프레임 워크 2의 인증을 처리하는 가장 좋은 방법
public function loginAction()
{
$message = '';
$message_type = '';
$form = new UserForm();
$form->get('submit')->setValue('login');
$request = $this->getRequest();
if($request->isPost())
{
$data = $request->getPost();
$user = $this->getUserTable()->getUser($data['username']);
$bcrypt = new Bcrypt();
if($bcrypt->verify($data['password'], $user->password))
{
$message = 'successfully logged in as ' . $user->username;
$message_type = 'success';
}
else
{
$message = 'invalid password or username';
$message_type = 'danger';
}
}
return new ViewModel(array(
'form' => $form,
'message' => $message,
'message_type' => $message_type,
));
}
지금 나는 내가 ZF2 인증 모듈을 사용하지 않는 알고 있지만 나는 Bcrypt 작업을 얻을 수 없습니다. 내 방법은 충분히 안전합니까? 아니면 Zend \ Authentication을 사용해야합니까?
편집
가 좋아, 내가 어떻게 든 작동하도록 관리, 여기에 새로운 코드 : 그것은 BCrypt와 젠드 \ 인증을 사용
public function loginAction()
{
$message = '';
$message_type = '';
$form = new UserForm();
$form->get('submit')->setValue('login');
$request = $this->getRequest();
if($request->isPost())
{
$user = new User();
$form->setInputFilter($user->getInputFilter());
$form->setValidationGroup('username', 'password');
$form->setData($request->getPost());
if($form->isValid())
{
$user->exchangeArray($form->getData());
$data = $this->getUserTable()->getUser($user->username);
$bcrypt = new Bcrypt();
if($bcrypt->verify($user->password, $data->password))
{
$dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
$authService = new CredentialTreatmentAdapter($dbAdapter, 'user', 'username', 'password');
$authService->setIdentity($user->username);
$authService->setCredential($data->password);
if($authService->authenticate()->isValid())
{
$message = 'successfully logged in as ' . $user->username;
$message_type = 'success';
}
else
{
$message = 'invalid password or username';
$message_type = 'danger';
}
}
}
}
잘 작동하는 것 같다.