2008-10-17 4 views
1

나는 누군가에게 확인 이메일을 보내는 웹 사이트를 가지고있다.확인을위한 최선의 방법 ID 제출을위한 이메일 링크

이제 이메일에서 사용자가 메일을 받았는지 확인하기 위해 링크를 클릭하고 싶습니다.

나는 사용자의 암호 (또는 임의의 코드)를 확인 주소에 포함시켜 사용자가 직접 입력 할 필요가 없지만 암호를 입력하면 브라우저 기록 및 로그 파일

사용자 이름과 암호 같은 정보를 전자 메일에 보내 링크에 연결하지 않고도 확인 링크를 얻을 수있는 다른 방법이 있습니까?
예를 들어 전자 메일에 입력 양식을 입력하고 암호를 GET 대신 POST로 보낼 수 있습니까?

답변

6

일반적으로 작동하는 방식은 확인 이메일에 일종의 GUID (Globally Unique Identifier)가 포함 된 링크가 포함되어있는 것입니다. GUID는 사용자 계정과 연결됩니다. 링크를 클릭하면 웹 응용 프로그램은 확인 플래그를 설정하고 일반적인 사용자 이름과 암호 조합 대신 GUID를 사용하여 사용자를 기록합니다.

+0

일반적으로 GUID가 "한 번 좋은 성격"이고 임무가 완료되면 GUID가 두 번째로 작업하지 못하게하는 것이 일반적입니다. –

+0

아주 좋은 지적입니다. –

+0

사용자 입력을하는 이유가 반환 화면의 비밀번호 나 사용자 이름을 입력해야하는 이유는 무엇입니까? – zsharp

2

이메일에 GUID를 전달할 수 있습니다. 특정 GUID는 사용자와 연결되어야합니다. 그런 다음 사용자가 링크를 클릭하면 GUID가 응용 프로그램으로 다시 전송되고 QueryString으로 캡처 될 수 있습니다. 사용자가 승인 한 GUID의 압축을 풉니 다.

5

사용자의 ID와 현재 시간을 기준으로 16 진수 요약 (예 : md5)을 계산합니다. 이 코드를 데이터베이스에 저장하거나 파일 이름으로 파일을 작성하고 사용자의 ID와 전자 메일 주소를 포함하십시오.

"/ confirm_email/{hexdigest}"또는 "/confirm_email.php?code="와 같은 URI를 기반으로 GET 요청을 수신하도록 http 핸들러 (cgi, php, servlet 등) {hexdigest} "

사용자가 전자 메일을 확인해야하는 경우 다이제스트가 포함 된 위의 서블릿에 대한 링크를 보내십시오.

누군가가이 URI에 링크하면 일치하는 다이제스트가있는 db 레코드 또는 파일을 검색하십시오. 하나가 발견되면 포함 된 이메일 주소가 확인됩니다.

사용자가 자신의 이메일을 확인할 때 소금이없는 전자 메일 주소 자체의 해시가되도록 16 진수 요약을 변경하십시오. 그런 다음 누군가의 이메일이 변경되어 다시 확인해야하는지 테스트 할 수 있습니다.