首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用cookie调用wordpress注销接口,但前端不注销

使用cookie调用wordpress注销接口,但前端不注销
EN

Stack Overflow用户
提问于 2022-10-24 09:52:22
回答 1查看 27关注 0票数 0

我试图使用RestTemplate来携带cookie并请求一个自定义Wordpress注销接口,但是前端没有注销。当我直接访问浏览器中的注销url时,我能够成功地注销。以下是我的RestTemplate代码:

代码语言:javascript
运行
复制
public void logoutOfWordpress(HttpServletRequest request, HttpServletResponse response) {
        Cookie[] cookies = request.getCookies();
        String url = wordpressProper.getRestUrl() + "/community-rest/logout";
        HttpHeaders httpHeaders = buildHeaderByCookies(cookies);
        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(httpHeaders), String.class);
        Object body = exchange.getBody();
    }

这是WordPress注销接口:

代码语言:javascript
运行
复制
add_action( 'rest_api_init', 'community_rest_logout');

function community_rest_logout() {
    register_rest_route(
        'community-rest',
        '/logout/', 
        array(
            'methods'  => 'GET',
            'callback' => 'logout'
        )
    );
}

function logout() {
    wp_logout();
    wp_redirect('http://192.168.100.5:8888/sign_in');
    exit;
}

我尝试使用Postman调用这个注销接口,发现响应头中有Set-Cookie。这似乎是登出所必需的。看来,我可以直接将cookie的Max-Age设置为0,以实现注销的目的,而不必调用注销接口。

EN

回答 1

Stack Overflow用户

发布于 2022-10-24 17:18:03

您使用什么作为用户登录?在wordpress rest中,会话不会在内部启动。如果用户登录到您的注销端点,您应该能够获得user_id。你能接这个吗?

通常,nonce用于未注册用户的rest。您需要在标头或参数中发送当前值。对于注册用户,您需要对cookie进行身份验证,或者可以使用一些rest身份验证插件。

对于一个简单的黑客,您可以在端点的顶部使用它:

代码语言:javascript
运行
复制
    public function init_cookie() {

        $userID = wp_validate_logged_in_cookie(false);

        if($userID) {
            wp_set_current_user($userID);
        }

    }

我还建议在类中定义代码或以函数的名称作为前缀。注销函数是一个非常通用的名称。如果这只是一个例子,忽略我所说的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74179367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档