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
'code' 카테고리의 다른 글
새 개체가 기존 개체와 오버레이/마지되도록 MongoDB 개체를 부분적으로 업데이트하려면 어떻게 해야 합니까? (0) | 2023.02.16 |
---|---|
연동 테스트용 스프링부트 인증 (0) | 2023.02.16 |
스프링 리다이렉트 속성: addAttribute() vs addFlashAttribute() (0) | 2023.02.16 |
카테고리를 포스트 워드프레스에 관련짓는 방법 (0) | 2023.02.16 |
jquery Ajax 호출 - 데이터 매개 변수가 MVC 컨트롤러 작업으로 전달되지 않습니다. (0) | 2023.02.16 |