Войдите в Flutter, используя учетные данные WordPress - PullRequest
0 голосов
/ 16 января 2020

Я новичок в Dart, а также в WordPress, я хотел бы поделиться некоторыми идеями о том, как или даже узнать, возможна ли следующая идея:

У меня есть страница WordPress с пользователем область уже задана, и я разработал во Флаттере приложение, к которому я хочу, чтобы только некоторые типы пользователей моей страницы WordPress имели доступ. Итак, я подумал о том, чтобы внедрить страницу входа в свое приложение и выполнить аутентификацию с помощью WordPress. Возможно ли это? Кто-нибудь может указать мне некоторые выдержки из кода или страниц, которые могут помочь мне достичь этого?

Спасибо

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Добавьте следующий код в WordPress (либо через (1001 *) вашей (дочерней) темы, либо создав и включив собственный плагин):

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);
}

Новый маршрут REST с именем / remote-login / логин был создан (вы можете изменить это в вызове 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.

0 голосов
/ 03 апреля 2020

Просто чтобы добавить к ответу Дамокла, мне нужно было сделать что-то похожее на это, чтобы все пошло как по маслу.

    var url = 'https://YOUR_DOMAIN_HERE/wp-json/remote-login/login';
    var authorization = 'Basic ' + base64Encode(utf8.encode('$username:$password'));
    var body = jsonEncode({'username': username, 'password': password});

    http.post(url,
            headers: {
              "Content-Type": "application/json",
              'Authorization': authorization
            },
            body: body)
        .then((http.Response response) {
      final int statusCode = response.statusCode;
      if (statusCode == 200) { 
      // things worked out! 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...