Android WordPress 用户的本机应用程序身份验证

Android native app authentification with WordPress users

我正在制作原生 Android 应用。我有一个有几个用户的 WordPress 网站。我希望我的 WordPress 用户使用相同的登录名和密码登录我的应用程序。我想要一个没有任何网络视图或网络浏览器的非常流畅的登录过程。 可能吗 ?你会推荐什么 ?

是的,这是可能的。您想要从应用程序端执行的所有操作,我建议将这些操作添加为 wordpress 端的 ajax 函数(这样更清晰和有条理 - 您可以像这样基于 json 进行交流).关于逻辑,您可以使用两种不同的方式实现它:

  • 假设您要实现一个允许用户注册、登录和创建帖子的应用程序。

第一种方式

 class App {

    public function __construct(){
        add_action( 'wp_ajax_nopriv_registerUser', array( $this, 'registerUser' ) );
        add_action( 'wp_ajax_nopriv_loginUser', array( $this, 'loginUser' ) );
        add_action( 'wp_ajax_nopriv_createPost', array( $this, 'createPost' ) );
    }


    public function registerUser() {
        //obviusly, you dont need any kind of auth over here
    }

    public function loginUser() {
        $username = //collect,sanitize data from post
        $password = //collect data from post

        $user = get_user_by( 'login', $username );
        if( wp_check_password( $password, $user->user_pass ) ) {
             //preform what you need to preform
             //construct successful result array
        }
        else {
            //populate result array with an error or something
        }
        wp_send_json( $result );
    }

    public function createPost() {

      $username = //collect,sanitize data from post
      $password = //collect data from post
      //collect rest of the data related with post by itself

      $user = get_user_by( 'login', $username );
      if( wp_check_password( $password, $user->user_pass ) ) {
           //insert post, construct successfully array 
      }
      else {
          //populate result array with an error or something
      }
      wp_send_json($result);

    }


}

正如您在上面的示例中所看到的,您可以根据需要注册任意多的 ajax 函数,并且在每个函数中您都可以进行用户检查和密码检查,这将正常工作。重点是,对于您要从移动应用执行的每个操作,您需要发送 username/password(您可以在应用端首次成功登录时存储这些)和其他参数。

第二种方式 上面的示例相同,但有一点不同。您可以(在应用程序端的第一次登录请求期间),在 php 端生成唯一的 guid,您可以将其保存在 wp 数据库中,然后 return 将其保存到您的应用程序端(您可以将其保存在您的应用程序中)边)。对于每个下一个请求,您可以从应用程序端发送该 guid 和用户名,确认用户已经登录并且可以执行特权操作。没有太大区别(从性能的角度来看,我认为在这两种情况下您只需要执行一个查询 - 从身份验证的角度来看,您可以执行一些测试以确认这一点 WP_User class ).如果您需要从一端到另一端识别不同的登录会话(如果应用程序崩溃并且您想检查您这边用户是否想要在 he/she 已经是 "logged in" 时执行登录,则第二种方法很有价值,或者您想禁止每个用户从一个以上的应用程序登录。)