솔직히 보안관련 이슈를 전혀...고려하지 않고 막코딩을 해 놔서 두렵긴 하지만 일단 문제없이 돌아는 간다...ㅋㅋ
> /src/Mailer/UserMailer.php
|
<?php
namespace App\Mailer;
use Cake\Mailer\Mailer;
use Cake\Mailer\Email;
class UserMailer extends Mailer
{
public function __construct(\Cake\Mailer\Email $email = null)
{
parent::__construct($email);
/**
* loadModel을 가능하게 하는 생성자
* modelFactory 에TableRegistory::get 을 지정해서 다른 테이블을 참조가능하게 함。
*/
$this->modelFactory('Table', ['Cake\ORM\TableRegistry', 'get']);
$this->loadModel('Contract'); // 참조 할 테이블명 지정
}
protected function resetPassword($id)
{
$contract = $this->Contract->get($id); // 데이터 불러오기
$loginid = $contract->loginid;
// password를 랜덤으로 생성함
$password = sha1(uniqid(rand(), true));
// DB에 새로운 패스워드를 업데이트 치기 위한 처리
$contract->password = $password;
if($this->Contract->save($contract)) // 자동으로 암호화 되어서 비밀번호가 저장된다..편리!!
{
// 업데이트 성공하면 아래 정보를 활영해서 메일을 보낸다.
$this
->profile('default')
->from(['메일주소' => '발신자이름'])
->to('메일주소') // 수신자 메일주소
->subject('제목')
->viewVars(['loginid' => $loginid,'password' => $password]) // 메일 본문에 표시할 값을 인자로 전달. 여기서는 임시 패스워드 발급 메일을 전송하기에 아이디와 생성된 임시 패스워드를 넣어줌.
->template('welcome_mail')
->emailFormat('html')
->layout('default');
}
else {
return false;
}
}
}
?>
|
좀 더 예외처리나 에러처리가 고려되어야 할 듯 싶다.
특히 메일이 전송되지 않은 경우에 대한 체크가 필수적으로 필요할 듯 싶은데 아직 방법을 찾지 못했다.
실무에서 쓰려면 여러가지 고려가 되어야 할 듯 싶음...
댓글
댓글 쓰기