我正在制作原生Android应用。我有一个WordPress网站,有一些用户。我希望我的WordPress用户使用相同的登录名和密码登录我的应用程序。我想要一个非常流畅的登录过程,没有任何webview或Web浏览器。 可能吗 ?你会推荐什么 ?
答案 0 :(得分:3)
是的,这是可能的。你想要从应用程序端执行的所有操作,我建议将这些操作作为ajax函数添加到wordpress端(它更加清晰和组织方式 - 你可以将你的通信基于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函数,并且在每个函数中都可以进行用户检查和密码检查,这样可以正常工作。重点是,对于您想要从移动应用程序中执行的每个操作,您需要使用其他参数发送用户名/密码(您可以在应用程序端首次成功登录时存储这些用户名/密码)。
第二路 上面的例子,有一点不同。您可以(在应用程序端的第一次登录请求期间),在php端生成唯一的guid,您可以将其保存在wp数据库中,并将其返回到您的应用程序端(您可以将其保存在应用程序端)。对于每个下一个请求,您可以从应用程序端发送该guid和用户名,确认该用户已经登录并可以执行特权操作。没有太大的区别(从性能的角度来看,我认为在两种情况下你都只需要执行一个查询 - 从auth的角度来看,你可以预先形成一些测试来确认这一点WP_User class )。如果您需要识别从一端到另一端的不同登录会话,那么第二种方法很有价值(如果应用程序崩溃并且您想要检查您的身边用户是否希望在他/她已经“已登录”时执行登录,或者您希望禁止从每个用户的多个应用程序登录。)