DataExplorer를 통해 사용자 이메일 인증 확인

API를 통해 사용자 ID가 이메일 주소를 이미 확인했는지 여부를 파악해야 합니다. DataExplorer를 사용하여 email_tokens 테이블을 조회하고 있지만, 특정 사용자 ID에 대해 여러 행이 있는 경우 어떻게 해석해야 하는지 혼란스럽습니다. 여러 행이 있는 경우, N-1개 행은 expired = true를 가지지만, expired = false인 행은 이메일 주소가 확인되었는지 여부를 나타내는 현재 상태가 아닌 것 같습니다. 예를 들어, expired = false인 email_tokens 행에서 confirmed = false로 표시되는 인증된 사용자가 있습니다.

아마도 잘못된 방법으로 접근하고 있는 것 같습니다. 조언을 부탁드립니다. 감사합니다!

@michebs Data Explorer 쿼리를 사용하여 이 정보를 추적할 수 있나요?

David님,

사용자가 이메일을 확인하면 confirmed column이 업데이트됩니다. 따라서 필터에 true를 추가하면 확인된 이메일만 나열됩니다.

도움이 되길 바랍니다.

SELECT 
    user,	
    email 
FROM email_tokens
WHERE 
    expired = false
    AND confirmed = true

무엇을 이루고 싶으신가요?

@michebs - 네. 제가 처음 시도했던 쿼리입니다. 하지만 이 쿼리로 검색되지 않는 활성 사용자 소수 집단이 있다는 것을 발견했습니다. 그런데 해당 사용자 중 한 명을 관리자 사용자 페이지에서 확인해 보니, 이메일은 유효한 상태(즉, 확인되지 않음으로 표시되지 않음)였습니다.

@pfaffman - 이 데이터는 사이트에서 회원들에게 제공하는 서비스의 상태 전이를 처리하는 데 사용됩니다. 새 회원이 가입하고 서비스를 요청할 때, 해당 서비스 제공을 위해 사용자에게 연락할 수 있는지 먼저 확인하고 싶습니다.

예를 들어, 다음 쿼리를 실행하면:

SELECT
  e.user_id,
  e.expired,
  e.confirmed,
  e.email
FROM email_tokens as e
WHERE e.user_id = 33

가장 활동적인 사용자 중 한 명을 조회하면 다음과 같은 결과가 반환됩니다:

user_id,expired,confirmed,email
33,false,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,true,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,false,somebody@somewhere.com
33,true,true,somebody@somewhere.com

만료되지 않은 유일한 행에서는 이메일이 확인되지 않은 상태로 표시됩니다.

시스템을 직접 관리할 수 있다면, Discourse 웹훅을 사용하여 사용자가 활성화되었음을 시스템에 알릴 수 있습니다. 하지만 쉬운 해결책은 사용자 기록의 active 필드를 확인하는 것입니다. 이메일 주소를 확인하기 전까지는 이 필드가 설정되지 않는다고 확신합니다.

http://localhost:3000/admin/users/1/jay.json을 요청하면 다음과 같은 기록을 받을 수 있습니다:

{
id: 1,
username: "jay",
name: "Jay User",
avatar_template: "/user_avatar/localhost/jay/{size}/3_2.png",
email: "jay@nowehre.invalid",
secondary_emails: [ ],
active: true,
admin: true,
moderator: false,
last_seen_at: "2020-11-04T20:13:04.240Z",
last_emailed_at: null,
created_at: "2020-10-05T21:14:52.570Z",
last_seen_age: 27.86773951,
last_emailed_age: null,
created_at_age: 2588319.53785305,
trust_level: 1,
.....
},

users.active가 딱 제가 필요한 것 같습니다. 감사합니다!