programing

Wordpress 사용자 인증 프로세스

linuxpc 2023. 3. 27. 21:03
반응형

Wordpress 사용자 인증 프로세스

워드프레스 DB 대신 외부 소스에서 사용자를 인증하고 싶은 워드프레스 시스템을 구축하고 있습니다.외부 DB와 통신하기 위해 wsdl 서비스를 사용하고 있으며 자격 증명을 기반으로 적절한 사용자 정보를 얻고 있습니다.하지만, 얻은 결과를 어떻게 진행해야 할지 모르겠습니다.누가 좀 도와주세요.

지금까지의 스텝은 다음과 같습니다.

플러그에 커스텀 함수를 작성했습니다.php를 호출합니다.user.php

function wp_authenticate_username_password($user, $username, $password) {
    if ( is_a($user, 'WP_User') ) { return $user; }
    if ( empty($username) || empty($password) ) {
        if ( is_wp_error( $user ) )
            return $user;

        $error = new WP_Error();

        if ( empty($username) )
            $error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));

        if ( empty($password) )
            $error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.'));

        return $error;
    }

    //$user = get_user_by('login', $username);  /*Replaced it with the below*/

    $user = validate_ep($username,$password);    

    echo "<pre>";
    print_r($user);  /*Produces the result in step 3*/
    echo "</pre>";
    exit;

의 커스텀 기능pluggable.php외부 DB와 통신합니다.

function validate_ep($username, $userpwd) { 
    $wsdl = "my web service path";
    $client = new SoapClient($wsdl); //(Parameter is the wsdl file in which the services are written.
    $newObj = new stdClass;
    $user_name = ucfirst($username);
    $user_pwd = md5($userpwd);
    $display_type = 'wp';

    try {
        $result = $client->log_process(array(0 => $user_name, 1 => $user_pwd, 2 => $display_type));              
        if ($result==FALSE)
            return FALSE;
        foreach($result->item as $key=>$valObj) {
            if(!is_numeric($valObj->key)) {
                $newObj->{$valObj->key} = $valObj->value;
            }
        }               

        /*$actual = unserialize(base64_decode($result));*/
        if (count($result) > 0) {
            $user = new WP_User;
            $user->init($newObj);
            return $user;
        }
    } catch (SoapFault $exp) {
        //print_r( $exp->getMessage());               
    }
    return false;
}

웹 서비스에서 반환된 결과

WP_User Object
(
    [data] => stdClass Object
    (
        [id] => ID
        [organization] => ID
        [login] => UserName
        [password] => ***
        [name] => Name

    )

    [ID] => 0
    [caps] => Array
    (
    )

    [cap_key] => wp_capabilities
    [roles] => Array
    (
    )

    [allcaps] => Array
    (
    )

    [filter] => 
)

누가 이 단계 이후에 제가 할 수 있는 일을 도와주세요.

WordPress 코어 파일을 변경하지 않는 것이 좋습니다.user.phpWordPress core가 업그레이드되면 덮어쓰게 됩니다.대신 다음 기사를 읽어보실 것을 제안합니다.

WordPress Replace 사용자 인증 내장

비디오 프레젠테이션에도 설명이 있습니다.

아래에 요약만 추가합니다.

기본 제공 인증을 교체할 때 주의해야 할 사항

WordPress는 빌트인 사용자 시스템에 크게 의존하고 있습니다.이 때문에 WordPress 데이터베이스에는 사용자에 대한 참조가 많이 작성됩니다.약간 짜증나긴 하지만, 이러한 한계를 극복하는 것은 여전히 매우 간단합니다.

WordPress를 사용하려면 WordPress 데이터베이스에 실제 사용자(WordPress 사용자)가 있어야 합니다.다행히 WordPress에는 사용자를 생성, 조작, 삭제하는 기능이 포함되어 있습니다.따라서 델의 서비스를 구축할 때는 인증유형에 관계없이 다음 절차를 수행합니다.

  • 대체 방법을 통한 사용자 인증
    • 비활성 사용자가 비활성 로그인 메시지를 표시할 경우
    • 유효한 사용자일 경우
      • 사용자가 WordPress 사용자 테이블에 있는지 확인합니다.
      • 사용자가 존재하는 경우 WP_User 객체에 사용자 데이터를 로드하여 반환한다.
      • 사용자가 존재하지 않는 경우
        • 대체 인증 서비스 사용자 정보에서 새 사용자 자동 생성
        • WP_User 객체에 사용자 로드 및 반환 데이터 생성 후

언급URL : https://stackoverflow.com/questions/19920212/wordpress-user-authentication-process

반응형