如何使用WordPress REST API登录用户?

时间:2021-09-24 作者:jeffinter

我想使用rest API获取请求中发送的用户名和密码,并在wp\\u authenticate()中使用它,然后在凭据正确时发回。我该怎么做呢。

2 个回复
SO网友:Aurovrata

有3种方法可以使用REST api端点请求对用户进行身份验证,

1-使用Cookie,这是WordPress在POST请求中跟踪经过身份验证的用户的方式。如果在REST请求中传递身份验证详细信息,请使用wp_signon() function 要登录用户,如果成功,请使用wp\\u set\\u auth\\u cookie()设置身份验证cookiefunction,

$creds = array(
    \'user_login\'    => \'example\',
    \'user_password\' => \'plaintextpw\',
    \'remember\'      => true
);

$user = wp_signon( $creds, false );

if ( is_wp_error( $user ) ) {
    $msg = $user->get_error_message();
}else{
  wp_clear_auth_cookie();
  wp_set_current_user ( $user->ID ); // Set the current user detail
  wp_set_auth_cookie  ( $user->ID ); // Set auth details in cookie
  $msg = "Logged in successfully"; 
}
你可以在这个WordPress论坛上找到一个讨论thread.

2-对自己的服务器使用基本身份验证请求

这里的想法是,对于您向服务器发出的每个REST请求,您都会(每次)通过SSL连接传递用户的凭据。WordPress API组提供plugin 在他们的GitHub repo上为您执行此操作,这允许您对用户的凭据进行编码,并在另一端对其进行解码以进行身份验证,例如,删除服务器上用户的帖子,

let user=\'...\', pw=\'...\';
jQuery.ajax({
   url: \'http://your-domain/wp-json/wp/v2/posts/50\',
   method: \'DELETE\',
   crossDomain: true,
   beforeSend: function ( xhr ) {
       xhr.setRequestHeader( \'Authorization\', \'Basic \' + Base64.encode( user + \':\' + pw ) );
   },
   success: function( data, txtStatus, xhr ) {
       console.log( data );
       console.log( xhr.status );
   }
});
有关更多详细信息,请参阅此详细信息tutorial

3-用户第三方身份验证,如开放OAuth.

这是Google使用的,并允许您的站点根据用户的Google登录凭据识别用户。WordPress.com 还将此方法用于其博客服务身份验证。

这样做的目的是让您的用户登录到一个能够识别他们的服务器(使用浏览器上的cookie)。

经过身份验证后,您的页面(反应式js)向身份验证机构/服务器发出请求,如果用户确认,该请求将返回一个访问令牌,该令牌用于对后续的REST请求进行身份验证。

您可以使用第三方身份验证服务,如Google,在这种情况下,您可以关注以下youtubetutorial 这将引导您完成设置Google API项目的基础知识,以允许您的应用程序发出身份验证请求。

或者,您可以使用现有插件将WordPress服务器转换为OAuth服务器,例如WP-OAuth Server, 以及其广泛的documentation.

SO网友:Mark Kaplun

“最佳方式”;“登录”;网站上的用户将使用wordpress登录表单。正如其他评论和答案所表明的那样,要按照问题标题所暗示的方式来做,需要对轮子进行一些改造。登录表单除了进行实际登录外,还可以在登录失败时提供反馈,并提供重置密码的流程。

即使你要完全;“无头”;wordpress经验您可能应该百分之百地确信重新设计登录表单的努力是值得的。

现在,如果您想对来自不同域的用户进行身份验证,那么它将不起作用,因为Cookie将只在站点的域IIRC上设置。

因此,唯一有效的用例是服务器到服务器的通信,在这种通信中,您需要存储从您的;“登录”;在下一个请求中请求并重用它们,但这意味着您将用户和密码存储在服务器上,在这种情况下,使用application passwords 实际上可能是一个更好的解决方案。