Новый зарегистрированный пользователь перенаправляется в Shopify - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть проблема с процессом регистрации клиентов Shopify, которую я просто не могу решить, я надеюсь, что кто-то здесь может пролить свет на эту проблему.

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

Из того, что я прочитал, по умолчанию поведение пользователя перенаправляется на страницу учетной записи, но по какой-то причине это не так.Для нас это не происходит.

Глядя на заголовки, кажется, что пользователь отправляется на страницу учетной записи, а затем сразу же отправляет 302 в корневой каталог.Учитывая, что это не стандартное поведение, мне интересно, было ли это настроено, и если да, то где?

Я не могу найти ничего в нашей теме, коде, js, который делает это.

Я полностью сбит с толку.

[Редактировать] Регистрационная форма в shopify

{% form 'create_customer' %}
    {{ form.errors | default_errors }}


    <div class="input-wrapper">
        <label for="FirstName" class="label-hidden">
            {{ 'customer.register.first_name' | t }}
        </label>
        <input type="text"
            name="customer[first_name]"
            id="FirstName"
            placeholder="{{ 'customer.register.first_name' | t }}"
            autofocus
            {% if form.first_name %}value="{{ form.first_name }}"{% endif %}>
    </div>

    <div class="input-wrapper">
        <label for="LastName" class="label-hidden">
            {{ 'customer.register.last_name' | t }}
        </label>
        <input type="text"
            name="customer[last_name]"
            id="LastName"
            placeholder="{{ 'customer.register.last_name' | t }}"
            {% if form.last_name %}value="{{ form.last_name }}"{% endif %}>
    </div>

    <div class="input-wrapper">
        <label for="Email" class="label-hidden">
            {{ 'customer.register.email' | t }}
        </label>
        <input type="email"
            name="customer[email]"
            id="Email"
            class="{% if form.errors contains 'email' %}input-error{% endif %}"
            placeholder="{{ 'customer.register.email' | t }}"
            value="{% if form.email %}{{ form.email }}{% endif %}"
            spellcheck="false"
            autocomplete="off"
            autocapitalize="off">
    </div>

    <div class="input-wrapper">
        <label for="CreatePassword" class="label-hidden">
            {{ 'customer.register.password' | t }}
        </label>
        <input type="password"
            name="customer[password]"
            id="CreatePassword"
            class="{% if form.errors contains 'password' %}input-error{% endif %}"
            placeholder="{{ 'customer.register.password' | t }}">
    </div>


    <div class="input-wrapper">
        <label for="PrivacyPolicy" class="label-hidden">
            <input type="checkbox"
            name="customer[note][Privacy Policy]"
            id="PrivacyPolicy"
            value="Accepted on {{ "now" | date: "%Y-%m-%d" }}" />
            I have read, understood and agree to the <a href="/pages/privacy-policy" target="_blank">Privacy Policy</a>.
        </label>
    </div>

    <div class="input-wrapper">
        <button disabled type="submit" class="button--primary" id="create_customer__submit">{{ 'customer.register.submit' | t }}</button>
    </div>

    <a href="{{ shop.url }}">{{ 'customer.register.cancel' | t }}</a>
{% endform %}

Я видел, что добавление следующего былопредложил как возможное исправление, но это не имело никакого значения в моем случае.

<input type="hidden" name="checkout_url" value="/account">

Я вижу через инспектора, что форма отправляется в «/ account», а затем перенаправляется (302) в «/»

Приведенная выше форма отображается в

<form method="post" action="/account" id="create_customer" accept-charset="UTF-8">
    <input type="hidden" name="form_type" value="create_customer" />
    ....
    ....
    <div class="input-wrapper">
        <button disabled type="submit" class="button--primary" id="create_customer__submit">Create</button>
    </div>
</form>

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Я обработал отправку формы с помощью jquery.Я видел несколько примеров и этого на сайте Shopify, особенно этот https://ecommerce.shopify.com/c/ecommerce-design/t/redirect-after-customer-registration-370825, и немного взломал его.Я поместил следующее в нижней части страницы учетной записи, и это работает.

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

(function() {
  'use strict';

  function handleSumission(event) {
    event.preventDefault();

    var data = $(this).serialize();

    $.post('/account', data)
      .done(function(data) {
        var errorsLog = $(data).find('.errors').text();

        // Show any errors that there may be
        if(errorsLog != "" && errorsLog  != 'undefined') {

          // Do error handling here

        } else {
          window.location.href = '/account';
        }
      })
        .fail(function() {
          // Tidy up if it fails
        });
  }

  function init() {
    $('#create_customer').on('submit', handleSumission);
  }

  window.addEventListener('load', init);

}());
0 голосов
/ 27 ноября 2018

Вы можете опубликовать форму с помощью Ajax, а затем при успешном перенаправлении на страницу учетной записи.

Пример, приведенный ниже:

    $('form#create_customer').on('submit', function(event){
        //debugger;
        event.preventDefault();
        var postUrl = $(this).attr('action');
        var postData = $(this).serialize();

        //console.log(postData); check what your form posts

        $.ajax({
            type: "POST",
            url: postUrl,
            data: postData,
            dataType: "json",
            success: function(data) {
                console.log('Account created')
                 //redirect to somewhere
                 window.location.replace("/some-url");
            },
            error: function() {
                console.log('error handling here');
            }
        });
    });
...