code

Wordpress Rest API를 사용하여 현재 로그인 사용자를 얻는 방법은 무엇입니까?

starcafe 2023. 2. 16. 21:55
반응형

Wordpress Rest API를 사용하여 현재 로그인 사용자를 얻는 방법은 무엇입니까?

사용자 지정 요청을 추가하려고 했습니다.

add_action('rest_api_init', function () {
    register_rest_route( 'custom', '/login', array(
        'methods' => 'GET',
        'callback' => function(WP_REST_Request $request) {
            return wp_get_current_user();
        }
    ));
});

그러나 ID가 = 0인 사용자는 항상 반환됩니다. 저도 다음과 같이 시도했습니다.

add_action('rest_api_init', function () {
    register_rest_route( 'custom', '/login', array(
        'methods' => 'GET',
        'callback' => function(WP_REST_Request $request) {
            return is_user_logged_in();
        }
    ));
});

그리고 그것은 항상 거짓으로 돌아옵니다.단, 사용자는 로그인 되어 있습니다.

커스텀 로그인을 추가했습니다.

add_action('rest_api_init', function () {
    register_rest_route( 'custom', '/login', array(
        'methods' => 'POST',
        'callback' => function(WP_REST_Request $request) {
            $nonce = wp_create_nonce("wp_rest");
            $user = wp_signon(array('user_login' => $_POST['username'],
                'user_password' => $_POST['password'], "rememberme" => true), false);
            if (is_wp_error($user)) {
                return $user;
            }

            //do_action( 'wp_login', "capad" );
            //$user['isloggedin'] = is_user_logged_in();
            return array('user' => $user,
                'nonce' => $nonce);
        }
    ));
});

그리고 나는 "X-WP-Nonce"를 http 요청 헤더로 추가합니다.

요구 출력: " " " 。{"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}

REST API Handbook의 Authentication 장에서 다음을 수행합니다.

쿠키 인증은 WordPress에 포함된 기본 인증 방식입니다.대시보드에 로그인하면 쿠키가 올바르게 설정되므로 플러그인 및 테마 개발자는 로그인 사용자만 있으면 됩니다.

단, REST API에는 CSRF의 문제를 피하기 위해 난스라는 기술이 포함되어 있습니다.이렇게 하면 다른 사이트에서 명시적으로 의도하지 않고 작업을 수행하도록 강요하는 것을 방지할 수 있습니다.이를 위해서는 API에 대해 약간 특별한 처리가 필요합니다.

내장된 Javascript API를 사용하는 개발자의 경우 자동으로 처리됩니다.이는 플러그인 및 테마에 API를 사용하는 데 권장되는 방법입니다.커스텀 데이터 모델은 wp.api.models를 확장할 수 있습니다.모든 사용자 지정 요청에 대해 올바르게 전송되도록 하기 위한 기준입니다.

개발자가 수동으로 Ajax 요청을 하는 경우 각 요청과 함께 난스를 전달해야 합니다.는 API로 를 사용합니다.wp_rest API를 할 수 _wpnonce요구에 중 ) GET에 데이터 파라미터(POST 데이터)X-WP-Nonce머리글

GET의 예를 다음에 나타냅니다.

https://example.tld/wp-json/wp/v2/users/me?_wpnonce=9467a0bf9c

또는 고객님의 경우:

https://example.tld/wp-json/custom/login/?_wpnonce=9463a0bf9c

난스가 생성되는 곳

wp_create_nonce( 'wp_rest' );

따라서 커스텀 엔드포인트를 테스트할 때 난스 부분을 잊어버렸을 가능성이 높습니다.

도움이 됐으면 좋겠다!

플러그인을 추가하지 않고 간단한 방법을 찾아 이틀을 보냈습니다.

기능면에서 1위입니다.php 여기서 api를 정의합니다.

//enqueue the script which will use the api
function api_callings_scripts() {
    wp_enqueue_script('score-script', get_template_directory_uri() . '/js/ScoreSaving.js', ['jquery'], NULL, TRUE);
    // Pass nonce to JS.
    wp_localize_script('score-script', 'ScoreSettings', [
      'nonce' => wp_create_nonce('wp_rest'),
    ]);
}
add_action( 'wp_enqueue_scripts', 'api_callings_scripts' ); 

그러면 Ajax call cloud 스크립트는 다음과 같습니다.

jQuery.ajax({
      type: "POST",
      url: "/wp-json/score/update",
      data: {"var1":"value1"},
      beforeSend: function(xhr) {
        xhr.setRequestHeader('X-WP-Nonce', ScoreSettings.nonce);
      },
    success: 
        function( data ) {
          console.log( data );
        }
    });

, 그럼 에는 '어울릴 수 .get_current_user_id()API api 、 API api api api 。

1. JWT Authentication for WP REST API 플러그인 설치 및 활성화, WP REST API 플러그인 설치
2. 모바일 앱이나 기타 소스 또는 우편 배달원으로부터 워드프레스 기본 API를 실행할 수 있게 되었습니다.예를 들어, 앱이나 우체부에서 이 url을 누릅니다.https://example.com/wp-json/wp/v2/posts
3. 앱별 또는 우체부별 유효한 상세(rest api 사용)로 로그인 시 토큰을 돌려드립니다.로그인하여 토큰을 가져오려면 우편 배달원 또는 앱 https://example.com/wp-json/jwt-auth/v1/token에서 다음 URL을 실행하십시오.
4. 이렇게 하면 그림과 같은 토큰을 얻을 수 있습니다.
이제 이 토큰을 사용하여 사용자 세부 정보를 로그인하십시오.
5. 기능을 작동시킵니다.php

function checkloggedinuser()
{
$currentuserid_fromjwt = get_current_user_id();
print_r($currentuserid_fromjwt);
exit;
}

 add_action('rest_api_init', function ()
{
  register_rest_route( 'testone', 'loggedinuser',array(
  'methods' => 'POST',
  'callback' => 'checkloggedinuser'
  ));
}); 

6. 우편 배달원 또는 앱에서 이 새 URL을 다시 실행하여 사용자 세부 정보를 로그인하십시오.https://example.com/wp-json/testone/loggedinuser (example.com을 URL대체) (https://i.stack.imgur.com/tIqhS.png))
7. 또한 pt.wordpress.org/plugins/jwt-authentication-for-wp-rest-api의 지시에 따라 .htaccess 파일과 wp-config.dll 파일을 편집합니다.

여기 다른 방법이 있다

$user_id = ""; //<- add this

add_action( 'rest_api_init', 'add_custom_users_api');

function add_custom_users_api(){
    $GLOBALS['user_id'] = get_current_user_id(); //<- add this

    // route url: domain.com/wp-json/mmw/v1/testing
    register_rest_route( 'mmw/v1', 'testing', array(
        'methods' => 'GET',
        'callback' => 'get_custom_users_data',
    ));
}
//Customize the callback to your liking
function get_custom_users_data(){
    return get_user_by( 'id', $GLOBALS['user_id'] ); //<- add this
}

WP REST API에 JWT 인증을 사용하는 것을 선호한다면 Json Web Tokens를 사용하여 구현하는 것이 더 쉬울 수 있습니다.

먼저 엔드포인트 /wp-json/jwt-auth/v1/token sending username/password 필드에 HTTP POST 요구를 송신하는 클라이언트를 인증하고 인증 토큰을 생성합니다.

succeful 응답은 다음과 같습니다.

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8",
    "user_display_name": "admin",
    "user_email": "admin@localhost.dev",
    "user_nicename": "admin"
}

그런 다음 요청 헤더 Authorization을 다음과 같이 각 요청 설정을 토큰으로 전달합니다.

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8

get_current_user_id()가 0을 반환하는 것과 같은 문제를 다루고 있었습니다.몇 가지 테스트를 통해 POST 요청을 보낼 때만 해당된다는 것을 알게 되었습니다.

GET 요구에서는 함수는 로그인한 사용자 ID를 반환하고 POST 요구에서는0 을 반환했습니다.공유 호스팅 환경에서의 서버 구성 때문일 수 있습니다.지금까지 이 건에 대해 언급하고 있는 투고나 코멘트를 찾을 수 없었습니다만, 제 경우는 이렇게 되어 있습니다.간단한 회피책은 사용자 ID를 GET 요청으로 프런트엔드로 되돌려 저장하고 추가 파라미터로 POST 요청으로 전송하는 것입니다.

rest 콜백에서 사용자 ID를 취득하는 가장 유연한 방법 중 하나라고 생각합니다.

<?php 

// register route
add_action( 'rest_api_init', function () {
    register_rest_route( 'el-dashboard-api', '/generic-comments', [
        'methods'   => 'GET',
        'callback'  => 'get_generic_comments',
        'login_user_id' => get_current_user_id(), // This will be pass to the rest API callback 
    ]);
});


// rest callback
function get_generic_comments($REST_REQUEST_OBJ){

    // get all the passed attrs
    $attrs =  $REST_REQUEST_OBJ->get_attributes();

    // check is login_user_id set as attr
    if( isset($attrs['login_user_id']) && intval($attrs['login_user_id']) > 0  ){

        $user_id        = intval($attrs['login_user_id']);
        $current_user   = get_user_by( 'id', $user_id );
        
        return "Authorize";

    }
    return "Not authorize";

}

언급URL : https://stackoverflow.com/questions/42381521/how-to-get-current-logged-in-user-using-wordpress-rest-api

반응형