Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Wordpress REST API对LearnDash中受保护数据的远程访问进行身份验证?_Wordpress_Api_Rest_Mobile - Fatal编程技术网

如何通过Wordpress REST API对LearnDash中受保护数据的远程访问进行身份验证?

如何通过Wordpress REST API对LearnDash中受保护数据的远程访问进行身份验证?,wordpress,api,rest,mobile,Wordpress,Api,Rest,Mobile,我正在开发一个移动应用程序(在flatter中),需要从Wordpress LearnDash LMS环境访问用户的课程数据。Wordpress站点可以通过https:///wp-json/ldlms/v1/path 但每当我尝试访问例如/ldlms/v1/sfwd courses//steps,结果就是401(未经授权)状态 从Wordpress文档中,我了解到它使用cookie身份验证。但是将wordpress\u logged\u in\ucookie添加到请求头中似乎没有什么区别 在哪里

我正在开发一个移动应用程序(在flatter中),需要从Wordpress LearnDash LMS环境访问用户的课程数据。Wordpress站点可以通过
https:///wp-json/ldlms/v1/
path

但每当我尝试访问例如
/ldlms/v1/sfwd courses//steps
,结果就是401(未经授权)状态

从Wordpress文档中,我了解到它使用cookie身份验证。但是将
wordpress\u logged\u in\u
cookie添加到请求头中似乎没有什么区别


在哪里可以找到访问此信息所需的缺少的身份验证详细信息?

我刚刚构建了REST API;所以我可能会有所帮助。以下示例将:

  • 注册自定义RESTAPI端点
  • 在第一次加载时本地化服务器端变量(端点、用户对象等)
  • 将NONCE附加到所有rest请求,以避免散列B
  • functions.php

    add_action('rest_api_init', 'register_custom_fields');
    function register_custom_fields(){
        register_rest_route(
            'app', '/login/',
            [ 'methods' => 'POST', 'callback' => 'asset_login' ]
        );
    }
    function asset_login(){
        $user = wp_signon($_POST);
        if (is_wp_error($user)){
            return [ 'result' => 'fail', 'error' => $user->get_error_message() ];
        } else {
            return [ 'result' => 'success', 'user' => [ 'ID' => $user->data->ID, 'name' => $user->data->display_name ] ];
        }
    }
    
    
    add_action('init','stage_script');
    function stage_script(){
    
        wp_enqueue_script('asset-library', trailingslashit(get_stylesheet_directory_uri()) . 'js/asset-library.js', ['jquery']);
    
        $assetUser = null;
        if (is_user_logged_in()){
            $user = wp_get_current_user();
    
            $assetUser = [
                'ID' => $user->data->ID,
                'name' => $user->data->display_name,
                'nickname' => $user->data->user_nicename,
                'email' => $user->data->user_email,
                'allcaps' => $user->allcaps
            ];
        }
    
        wp_localize_script( 'your-app', 'App', [
            'user' => $assetUser,
            'api_endpoint' => esc_url_raw( rest_url() ),
            'api_version' => 'wp/v2/',
            'nonce' => wp_create_nonce( 'wp_rest' )
        ]);
    }
    
    script.js

        // The Login Controller
        let AppUser = {
            loggedIn: false,
            login: function(data){
                $.ajax( {
                    url: App.api_endpoint + 'your-app/login',
                    method: 'POST',
                    beforeSend: function ( xhr ) {
                        xhr.setRequestHeader( 'X-WP-Nonce', App.nonce );
                    },
                    data: data,
                    success: function(response){
                        /* ... parse response ... */
                    },
                    error: function(response){
                        /* ... parse response ... */
                    }
                });
            }
        };
    
    
        // The API Controller
        let QueryController = {
            Objects: [],
            getObjects: async function(){
    
                let q = {};
                /* ... build query stuff extracted */
    
                try {
                    const response = await $.ajax( {
                        url: App.api_endpoint + App.api_version + 'post_object',
                        method: 'GET',
                        beforeSend: function ( xhr ) {
                            xhr.setRequestHeader( 'X-WP-Nonce', App.nonce );
                        },
                        data: q
                    });
    
                    this.Objects = response;
                    return response;
                } catch(e) {
                    console.log('Error: ', e);
                }
            }
        };
    

    我不明白为什么您建议创建一个新的API实现,而LearnDash已经公开了一个完整的RESTAPI。我不能通过在请求中提供适当的参数来访问现有API的受保护部分吗?当然可以。wp_signon()方法负责所有这些。然后,现在只需将其添加到所有调用的本机API中(包括LearnDash的API)。