그누보드 4 패스워드 워드프레스 이전 관련

그누보드 4 패스워드 워드프레스 이전 관련

QA

그누보드 4 패스워드 워드프레스 이전 관련

답변 1

본문

안녕하세요,


그누보드 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'];
}
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 19
© SIRSOFT
현재 페이지 제일 처음으로