首页 > 解决方案 > 使用 WordPress 凭据登录 Flutter

问题描述

我是 Dart 和 WordPress 的初学者,我想要一些关于如何甚至知道以下想法是否可行的想法:

我有一个 WordPress 页面,已经设置了一个用户区域,并且我在 Flutter 中开发了一个应用程序,我只希望我的 WordPress 页面的某些类型的用户可以访问它。所以我想在我的应用程序中实现一个登录页面,使用 WordPress 进行身份验证,这可能吗?任何人都可以向我指出一些可以帮助我实现这一目标的代码或页面的摘录?

谢谢

标签: wordpressauthenticationflutter

解决方案


将以下代码添加到您的 WordPress(通过您的(子)主题functions.php,或者通过创建和启用您自己的插件):

add_action('rest_api_init', 'remoteLogin');

public static function remoteLogin($request = [])
{
    register_rest_route('remote-login', 'login', array(
        'methods' => 'POST',
        'callback' => 'restUserLogin',
    ));
}

function restUserLogin($request = [])
{
    $response = [
        'success' => false,
        'message' => 'Login failed'
    ];
    $status_code = 403;
    $parameters = $request->get_json_params();
    $username = sanitize_text_field($parameters['username']);
    $password = sanitize_text_field($parameters['password']);

    $user = null;
    if (!empty($username) && !empty($password)) {
        $user = wp_authenticate($username, $password);
    }

    if ($user instanceof WP_User) {
        $response['success'] = true;
        $response['message'] = 'Login successful';
        $status_code = 200;
    }

    return new WP_REST_Response($response, $status_code);
}

已创建名为 /remote-login/login 的新 REST 路由(您可以在register_rest_route调用中将其更改为您喜欢的任何内容)。新创建的 REST 路由也将列在https://YOUR_DOMAIN_HERE/wp-json/上。

接下来,您可以在 Flutter 应用程序中发布用户名和密码,例如:

  var url = 'https://YOUR_DOMAIN_HERE/wp-json/remote-login/login';
  var body = jsonEncode({ 'username': 'USERNAME', 'password': 'SECRET' });
  http.post(url,
      headers: {"Content-Type": "application/json"},
      body: body
  ).then((http.Response response) {
      final int statusCode = response.statusCode;
      if (statusCode == 200) {
         // login successful...

在本例中,状态码为 200 或 403。对于 200,登录成功,因此无需查看响应 JSON 的成功部分。


推荐阅读