discuzX3.2 등록 페이지의 등록 메일박스 인증 닫기
포럼 업그레이드 후 등록 사용자가 메일박스email을 입력할 때 이메일 주소가 올바르지 않다는 것을 알 수 있습니다.Firephp 추적으로 발견: 무작위로 생성된 이메일의 접두사는 @localhost!
원인을 찾아 다음과 같이 수정합니다.
// if(empty($email) && $_G['setting']['forgeemail'])
{$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}// emai @localhost, if(empty($email) && $_G['setting']['forgeemail'])
{$_GET['email'] = $email = strtolower(random(16)).'@'.'klaus.com';
}// 16 , ;
// , 'Email ' !
하지만 이 느낌은 너무 lower입니다. dz3.1 이전으로 돌아가는 방법은 다음과 같습니다.
DZ3.2 이전 버전의 백그라운드에서 전역 – 등록 및 액세스 – 메일박스 등록 취소는 다음 그림과 같이 필수입니다.
이어서 문제가 생겼다. Discuz 공식 팀도 이 문제를 고려했을 것이다. 아마도 그들도 나처럼 이곳이 백그라운드에서 나타날 필요가 없다고 생각했을 것이다. 그래서 그들은 X3.2 버전에서 이 모듈을 업데이트했다. 업데이트 결과는 다음과 같다. 백그라운드에서 이 설정을 취소하지만 데이터베이스에 저장된 정보는 변하지 않는다.그리고 등록할 때 이 데이터베이스에 설정된 값을 사용하지 않습니다.그래서 위의 문제가 발생했습니다. 사용자로 하여금 반드시 채워야 할 필요가 없다고 느끼게 했지만 채워지지 않으면 등록할 수 없습니다
문제 분석
X3.1 백그라운드 설정 분석을 통해 이곳은 라디오 유형, 즉 스위치라는 것을 발견했다.폼name은settingnew[forgeemail]이고, 값은 0과 1, 0은 닫고, 1은 열기입니다. 이것은 일반적인 습관과 같습니다.즉, 이 값이 1을 선택할 때 우리가 등록할 때 메일박스를 쓰지 않아도 되고, 반대로 기본적으로 우리는 메일박스를 써야 계정을 등록할 수 있다.
Discuz 2차 개발을 한 학생들은 모두 알고 있어야 한다. 사실 백그라운드와 같은 설정 데이터는 모두common_에 저장되어 있다.setting이라는 데이터 테이블에서 나는 이 데이터 테이블에 forgeemail이라는 기록이 직접 있는 것을 발견했다. 이것은 이곳dz가 직접 저장된 것을 설명한다. (고광값 정보를 저장하고 싶지 않은 것처럼 진법으로 전환하고 하하, 원본 코드를 다시 볼 필요가 없다.)아래 그림 (물론 아래는 기본 모양)
문제 해결
여기까지 말하면 여러분은 어떤 문제가 있는지 알 수 있을 것입니다. 사실 이 문제는 3.2 이후 이 데이터표의 스카이가 forgeemail에 대한 기록은 단지 붉은 별을 가지고 있는지 아닌지를 판단하는 데 사용되고 진짜 작성해야 하는지 아닌지를 판단하는 데 사용되지 않습니다.다시 말하면 여기에 설정된 것이 0이든 1이든 당신의 사이트가 등록될 때 메일박스를 작성해야 한다(이것도 DZ팀이 이 문제를 업그레이드하고 바꾸는 데 소홀히 하는 부분일 수 있다. 예를 들어 필수로 강제로 설계하더라도 데이터베이스의 이 필드 값을 레벨이 올라갈 때 자동으로 0으로 덮어써야 한다).
그러면 만약에 철저하게 해결된다면 (즉, 당신의 사이트로 하여금 사용자가 메일박스를 쓰지 않아도 등록할 수 있도록 할 수 있다) 이것은 상대적으로 복잡하기 때문에 당신의 등록 표의 검증 절차를 수정해야 한다. 그리고 저는 개인적으로 이렇게 하는 것을 추천하지 않는다. 여기는 상세하게 설명하지 않는다.
그러면 다음은 등록할 때 붉은 별(사실 기본값은 이렇다)을 끼우는 것이다. 물론 문제는 3.2 이전에 백그라운드를 통해 이 값을 설정한 사이트를 겨냥한 것이다.그럼 이제 데이터베이스에서 common_을 찾아볼게요.setting 이 데이터 테이블은skey값forgeemail의 svalue를 기본 0으로 바꾸면 됩니다. 데이터베이스 관리 도구나 사이트 백그라운드에서 다음 ql문장을 실행할 수도 있습니다.
update pre_common_setting set 'svalue'='0' where 'skey'='orgeemail'
: DZ pre_, ,
discuzX3.2 백그라운드에서 메일박스 등록 필수 옵션을 닫는 기능입니다.자세한 절차는 다음과 같습니다. 1단계: source/admincp/admincp_setting.php 파일 찾기:
showsetting('setting_access_register_send_register_url', 'settingnew[sendregisterurl]', $setting['sendregisterurl'], 'radio');
대략 440-441 줄: 다음 코드를 추가합니다.
showsetting('setting_access_register_forge_email', 'settingnew[forgeemail]', $setting['forgeemail'], 'radio');
2단계: source/language/lang_ 열기admincp.php 파일 찾기: 메일박스 하나에 계정 하나만 등록할 수 있습니다
대략 811행으로 다음 코드를 추가합니다.
'setting_access_register_forge_email' => ' ',
'setting_access_register_forge_email_comment' => ' , ',
3단계: 수정
source
.대략 611줄:$email = strtolower(trim($_GET['email']));if(empty($this->setting['ignorepassword'])) {if($_GET['password'] !== $_GET['password2']) {
showmessage('profile_passwd_notmatch');
}if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password'])) {
showmessage('profile_passwd_illegal');
} $password = $_GET['password'];
} else { $password = md5(random(10));
}
}
로 수정하거나 다음을 직접 대체합니다.
$email = strtolower(trim($_GET['email']));if(empty($email) && $_G['setting']['forgeemail']) { $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}if(empty($this->setting['ignorepassword']))
{ if($_GET['password'] !== $_GET['password2']) {
showmessage('profile_passwd_notmatch');
} if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password']))
{
showmessage('profile_passwd_illegal');
} $password = $_GET['password'];
}
else { $password = md5(random(10));
}
}
도구 -> 캐시 업데이트: 글로벌 -> 등록 및 액세스 제어:
등록 페이지에 등록 메일박스 옵션을 표시하지 않으려면 템플릿에 있는 해당하는 이메일 코드를 제거하면 됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 아날로그 로그인 163 메일박스텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.