그럴 때 있잖아 패스워드 잃어버려서 갱신해야 할 기분...
그런데 있잖아 암호화 되서 그 결과가 실패인거지..
다들 말하잖아 그냥 가져다가 비교하면 되는 거 뭐 그리 고민하냐고~
회사 선배 말했잖아 핸들러 쓰지 않으면 당연히 에러라고~
나는 쇼미충 우원재 랩 분위기로 ㅋㅋㅋㅋ
cakephp3 에서는 인증 컴포넌트에서 기본적으로 패스워드를 암호화 하는 기능을 제공한다.
제대로 설정만 해 주면 1234 라고 입력해도 DB에는 제대로 암호화 된 해시값(해쉬스완 아님...풋!풋!풋!메롱~) 이 들어간다.
그러고나면 Bake로 생성된 CRUD 페이지에서 암호 입력과 수정이 되는데 뭔 걱정..?? 이라고 생각했는데..
패스워드를 분실해서 갱신하거나 재발급 하는 경우, 혹은 임시로 패스워드를 발급한 후 강제적으로 패스워드를 갱신시킨 후 로그인이 가능하게 하는 경우 등등...에 폼에서 입력받은 값과 디비에서 꺼내온 암호화 된 값을 비교해야 한다.
이 때, 그냥 디비에 있는 암호를 복호화 시킨다거나
$password_now = $this->request->data['password_now']; // 입력받은 패스워드 값을 넣고
$password = $user->password;
$password = Security::decrypt($pwd,$salt_key); // 멋대로 복호화를 해서
if ($password === $password_now){//code} // 이렇게 비교하면 바보인증..
혹은 입력받은 패스워드를 암호화 해서 비교를 한다거나...
$password_now = $this->request->data['password_now']; // 입력받은 패스워드 값을 넣고
$password_now = Security::hash($password_new,$salt_key); // 멋대로 암호화를 해서
$password = $user->password;
if ($password === $password_now){//code} // 이렇게 비교하면 바보인증..
하면 여러가지 에러를 만나게 된다..예를 들면 이런 거...(그 외에도 매칭되는 데이터가 없다는 등등..)
그래서 찾아본 결과~DefaultPasswordHasher 를 이용하지 않으면 아니아니 아니되오~(언제적 개그냐)
저 놈을 불러온 후, check()라는 함수로 두 값을 비교한 후, 갱신하고 싶은 값을 변수에 할당한 후 save() 하면
다시 자동적으로 해시화 되어서 암호가 저장된다.
다음은 예시~ㅋㅋ
> /src/Controller/UsersController.php
|
use Cake\Auth\DefaultPasswordHasher;
class UsersController extends AppController
{
public function change()
{
if ($this->request->is('post'))
{
$user_id = $this->request->data['user_id'];
$password_now = $this->request->data['password_now'];
$password_new = $this->request->data['password_new'];
$query = $this->Users->find()->where(['user_id' => $user_id]);
$user = $query->first();
if($user)
{
$hasher = new DefaultPasswordHasher();
$equal_check = $hasher->check($password_now, $user->password);
// 입력한 패스워드가 암호화 된 패스워드와 일치하는 경우 디비에 패스워드를 갱신
if($equal_check)
{
$user->password = $password_new;
if ($this->Users->save($user))
{
$this->Flash->success(__('패스워드를 갱신했습니다. 로그인 해 주세요'));
return $this->redirect(['action' => 'login']);
}
else
{
$this->Flash->error(__('패스워드 갱신에 실패했습니다.'));
}
}
}
}
}
|
기본 중의 기본인데 이걸 못해서 개삽질을 6시간이나 하고 있었다는 슬픈 이야기...ㅠㅠ
*잡담 : 오랫만에 동광신기 스러운 글을 써 봤네...김광일이 보고싶구나 어디서 뭐하냐...
댓글
댓글 쓰기