Как я должен подойти: Социальный вход WordPress (веб) и Flutter (мобильный)

#wordpress #flutter #authentication

#wordpress #flutter #аутентификация

Вопрос:

Я немного запутался в том, как мне следует подойти к моей цели, которая заключается в добавлении социального входа как на сайт WordPress, так и на flutter и интеграции его содержимого с использованием WordPress в качестве серверной части.

  • С точки зрения flutter, я мог бы использовать определенные плагины для OAuth для каждого провайдера или даже использовать Firebase.
  • С сайта WordPress множество плагинов для достижения той же функциональности.

Моей первой мыслью было использовать firebase для создания какого-то рабочего процесса

 1 User tries to Login in Flutter with any social provider
2 I check if user has already an account in Firebase
2a If it does, go and fetch the user token in WordPress
2b if it does not, I create the user in Firebase and then do a callback to wordpress site to create it and obtain the wordpress token
  

Но все же, не уверен, что это сработает. Что произойдет, если тот же пользователь попытается войти на сайт WordPress, используя того же / любого провайдера, создаст ли он нового пользователя на сайте WordPress? Скажет ли он ему, что он уже зарегистрирован или просто войдет в систему без проблем.

Я приношу извинения за вопрос новичка.

Кроме того, хотелось бы избегать максимально возможных решений для платных плагинов, поскольку для меня это процесс обучения, а не денежный вопрос или профессиональная работа.

Заранее спасибо


Обновить:

Спасибо за ответ, я рассмотрел такой плагин, но, как я уже упоминал, я стремился узнать, как выполнить такую интеграцию. То, что я в итоге сделал, на самом деле было довольно простым, но очень сложным решением, которое удовлетворяет мои потребности.

  • Сначала я создал учетную запись Firebase, добавил FireStore и все необходимые учетные записи в социальных сетях (у вас есть много видеороликов о том, как это сделать)
  • В flutter установлен плагин FireBase Core для интеграции между обоими.
  • После этого я создал несколько конечных точек rest API в WordPress, которые обрабатывают ответ от Firebase.

Итак, другими словами, для интересующего меня варианта использования (авторизация пользователя) Firebase обрабатывает Google, Facebook и логин N в социальных сетях … после того, как они вошли в flutter (у меня есть токен для социальных сетей), я затем запрашиваю rest Api из WordPress, чтобы узнать, существует ли пользователь уже (обновить) или мне нужно его создать. Если он создан, я создаю cookie (почему Cookie? будет обрабатывать элементы корзины WooCommerce и синхронизировать их по умолчанию), но вы можете сгенерировать токен, если вам нужно, и все. Пользователь создает Firebase с соответствующим токеном и в WordPress генерирует cookie для действий пользователя. Ниже вы можете найти конечную точку rest Api, идущую из одной из социальных сетей в качестве примера .. из flutter у вас есть несколько на YouTube.

 public function loginFacebook($args = null)
  {
    $parsedArgs = $args->get_params();
    $userToken = $parsedArgs["token"];

    if (empty($userToken)) {
      return YaguaretePluginApiCommonFunctions::wpError(
        "error_response_token_empty",
        401
      );
    }

    //facebook arguments
    $fields = "id,name,first_name,last_name,email,picture.type(large)";
    $enable_ssl = true;

    $response = YaguaretePluginApiCommonFunctions::wpUrlRequest(
      "https://graph.facebook.com/me/?fields=" .
        $fields .
        "amp;access_token=" .
        $userToken
    );

    if (!isset($response["email"])) {
      return YaguaretePluginApiCommonFunctions::wpError(
        "error_response_token_invalid",
        401
      );
    }

    if (!email_exists($response["email"])) {
      $userName = $response["name"];
      while (username_exists($userName)) {
        $i  ;
        $user_name = strtolower($userName) . "." . $i;
      }

      $userData = [
        "user_login" => $userName,
        "user_email" => $response["email"],
        "user_pass" => wp_generate_password(
          $length = 12,
          $include_standard_special_chars = false
        ),
        "display_name" => $result["name"],
        "first_name" => $result["first_name"],
        "last_name" => $result["last_name"],
      ];

      //inserting user
      $user = wp_insert_user($userData);
    }

    $user = get_user_by("email", $response["email"]);
    add_user_meta(
      $user->ID,
      "YaguaretePluginSocialAvatar",
      $response["picture"]["data"]["url"],
      true
    );

    return YaguaretePluginApiCommonFunctions::wpInternalCallGetUser(
      $response["email"]
    );
  }
  

В любом случае, спасибо за ответ!

Комментарии:

1. Привет, у кого-нибудь есть какие-либо подсказки по этому вопросу?.

Ответ №1:

Я надеюсь, что вы нашли решение. Если нет, вы можете взглянуть на использование FirebaseUI Web на WordPress с помощью Integrate Firebase PRO плагина.

https://firebase-wordpress-docs.readthedocs.io/en/latest/auth/work-with-firebaseui-web.html

Аутентификация на WordPress будет обрабатываться аутентификацией Firebase, поэтому у них будет одна и та же база пользователей.