그누보드 4 패스워드 워드프레스 이전 관련
본문
안녕하세요,
그누보드 4의 내용을 워드프레스로 대부분 이전 완료했는데 패스워드가 암호화 방식이 달라서 기존 암호로는 접근이 안되는 문제가 있습니다.
전체를 리셋해서 회원들에게 새 비번을 찾아 가도록 하는 방법도 있긴한데 이것은 역시 회원들의 불편을 초래할 것 같아서 기존 비번으로 접근이 가능하도록 하고 싶은데 혹시 아시는 분 있으시면 도움을 구합니다.
감사합니다.
답변 1
제가 3년전에 그누보드 5용으로 짰었던 코드입니다.
지금은 제대로 동작하는지 잘 모르겠습니다.
코드를 보시면 도움이 되실겁니다.
사전에 user_meta 테이블에 mb_password 키로 기존의 그누보드 4용 패스워드를 저장해 놓습니다.
그런 다음 add_filter 함수를 이용하여, 워드프레스에서 로그인시 아래 코드를 실행시킵니다.
//로그인 필터
add_filter( 'wp_authenticate_user', 'g5_authenticate_login_filter', 10, 2 );
function g5_authenticate_login_filter($user, $password){
global $wpdb;
//로그인 패스워드 검사를 미리 한다.
if ( isset($user->ID) && !wp_check_password($password, $user->user_pass, $user->ID) ) {
$g5_password = get_user_meta($user->ID, 'mb_password'); //user meta에 mb_password필드를 구해온다.
//mb_password가 있다면 아래 실행
if( !empty($g5_password[0]) ){
if( $g5_password[0] === g5_sql_password($password) ){ //그누보드5에서 쓰던 비번이 맞다면
wp_set_password($password, $user->ID ); //워드프레스 비밀번호로 바꾼후
delete_user_meta($user->ID, 'mb_password'); //user_meta 에서 더 이상 사용되지 않을 해당 mb_password 필드를 지운다.
$g5_user = get_user_by( 'login', $user->user_login ); //변경된 사용자 값을 다시 가져온다
return $g5_user; // 유저 정보를 리턴
}
}
}
return $user;
}
function g5_sql_password($value)
{
global $wpdb;
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = $wpdb->get_row(" select password('$value') as pass ", ARRAY_A);
return $row['pass'];
}
답변을 작성하시기 전에 로그인 해주세요.