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" 时执行登录,则第二种方法很有价值,或者您想禁止每个用户从一个以上的应用程序登录。)
我正在制作原生 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" 时执行登录,则第二种方法很有价值,或者您想禁止每个用户从一个以上的应用程序登录。)