# 会員登録後に会員登録完了ページに遷移させたい(ただし、エラーがある場合は会員登録ページに戻したい)

**URL:** <https://community.shopify.com/t/topic/24258>\
**Category:** 技術的なQ＆A\
**Created:** [November 4, 2020, 5:25am UTC](https://community.shopify.com/t/topic/24258 "2020-11-04T05:25:36Z")\
**Posts on this page:** 7\
**Page:** 1

## AI-generated summary

ShopifyのDebutテーマで、会員登録後に固定ページの完了画面へ遷移させたい一方、入力不足や既存メールアドレス重複などのエラー時は登録ページに戻したい、という相談。提示された`return_to`の隠しinputを追加する方法では、成功・失敗に関係なく完了ページへ飛んでしまう点が問題になっていました。

主な見解:
- Shopify側で会員登録エラーを処理するため、テーマだけで送信時に成功/失敗を分岐するのは難しい。
- 代替案として、Storefront API（Shopifyの外部向けAPI）で会員登録処理自体を自作する方法も提案されたが、実装規模は大きめ。
- 現実的な解決策として、完了ページ側でLiquidの`customer`（ログイン中の顧客情報）を使い、`{% unless customer %}`で未ログイン＝登録失敗と判定し、JavaScriptで登録ページやトップへ再リダイレクトする案が提示された。

結論:
- `unless customer`を使う案で解決。
- 相談者は「やりたかったことができた」と報告しており、スレッドは実質的に解決済みです。

<div class="post-metadata">

**Author:** ![toi4](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/toi4/32/122174_2.png) [@toi4](https://community.shopify.com/u/toi4)\
**Post date:** [November 4, 2020, 5:25am UTC](https://community.shopify.com/t/topic/24258/1 "2020-11-04T05:25:36Z")

</div>

Debutテーマを利用して、現在会員登録ページを作成しています。

Debutでは会員登録した後デフォルトだとトップページに飛ばされますが(カートに商品がある場合はチェックアウトに飛ぶ)、そうではなくページ機能で作成した会員登録完了ページ(/pages/register\_completed)にとばしたいと考えております。

そこで色々調べたところ、下のようなコードをtheme.liquidのタグの上に置いたら良いとか、

[https://community.shopify.com/c/Shopify-Design/Redirect-after-customer-registration/td-p/293044/page/3](https://community.shopify.com/c/Shopify-Design/Redirect-after-customer-registration/td-p/293044/page/3)

```auto
<!-- Handle registration redirect -->
<script>
  $(document).ready(function(){
    var $returnTo = $('<input type="hidden" name="return_to" value="/pages/register_completed" />');

    if ($('#create_customer').length > 0){ //if registration form
      $returnTo.insertBefore($('#create_customer input[type="submit"]')); // add return_to input
    } else if ($('#g-recaptcha').length){ //if captcha form
       $returnTo.insertBefore($('.shopify-challenge__container input[type="submit"]'));
    }
  });
</script> 

```

[https://heliumdev.com/blog/shopify-redirect-after-registration/](https://heliumdev.com/blog/shopify-redirect-after-registration/)

```auto
<script>
  (function() {
    var REDIRECT_PATH = '/pages/register_completed';

    var selector = '#create_customer, form[action$="/account"][method="post"]',
        $form = document.querySelectorAll(selector)[0];

    if ($form) {
      $redirect = document.createElement('input');
      $redirect.setAttribute('name', 'return_to');
      $redirect.setAttribute('type', 'hidden');
      $redirect.value = REDIRECT_PATH;
      $form.appendChild($redirect);
    }
  })();
</script>

```

の方法が見つかりましたが、これらの方法では、確かに会員登録完了ページにリダイレクトしてくれますが、エラーがある時(項目を未入力、一度会員登録したことあるメアドで登録)であっても会員登録完了ページに遷移してしまいます。

エラーがある時は、会員登録ページに戻され、会員登録が成功したときだけ会員登録完了ページに飛ばす良い方法はないでしょうか？

---

<div class="post-metadata">

**Author:** ![junichiokamura](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/junichiokamura/32/299737_2.png) [@junichiokamura](https://community.shopify.com/u/junichiokamura)\
**Post date:** [November 10, 2020, 2:23pm UTC](https://community.shopify.com/t/topic/24258/2 "2020-11-10T14:23:34Z")

</div>

この共有されている方法は、Shopifyの会員登録の送信先の隠しパラメータ的なものを追加している方法で、会員登録エラー自体はShopifyそのものが行うので、テーマ側で処理分岐するのは難しいです。

（エラー時のreturn\_urlのような隠しパラメータがあれば、それを設定すれば動作するかもですが、存在は把握していません）。

なので、少し挙動はいまいちになりますが、通常の遷移のままにしてエラーハンドリングはShopifyに任せて、通常の完了で遷移するページの先にJavaAScriptかヘッダなどでリダイレクトさせるのが良いかと思います。

---

<div class="post-metadata">

**Author:** ![AmberHuang](https://avatars.discourse-cdn.com/v4/letter/a/85f322/32.png) [@AmberHuang](https://community.shopify.com/u/AmberHuang)\
**Post date:** [November 12, 2020, 5:53am UTC](https://community.shopify.com/t/topic/24258/3 "2020-11-12T05:53:31Z")

</div>

> [@junichiokamura](#):
>
> さんは書きました:
> 
> この共有されている方法は、Shopifyの会員登録の送信先の隠しパラメータ的なものを追加している方法で、会員登録エラー自体はShopifyそのものが行うので、テーマ側で処理分岐するのは難しいです。
> 
> （エラー時のreturn\_urlのような隠しパラメータがあれば、それを設定すれば動作するかもですが、存在は把握していません）。
> 
> なので、少し挙動はいまいちになりますが、通常の遷移のままにしてエラーハンドリングはShopifyに任せて、通常の完了で遷移するページの先にJavaAScriptかヘッダなどでリダイレクトさせるのが良いかと思います。

会員登録完了の通常の遷移先はトップページですね

そのページで「会員登録完了してから遷移してきた」ことを検知して、JS script でリダイレクトさせたいんですが、

どうやって検知するかちょっとわからなくて、

やり方をご存知でしょうか？

---

<div class="post-metadata">

**Author:** ![junichiokamura](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/junichiokamura/32/299737_2.png) [@junichiokamura](https://community.shopify.com/u/junichiokamura)\
**Post date:** [November 13, 2020, 3:19am UTC](https://community.shopify.com/t/topic/24258/4 "2020-11-13T03:19:40Z")

</div>

なるほど、確かにGETパラメータで何も出ないので、難しいですね。

少し違うアプローチですが、以下の動画で、storefront APIを使って会員登録を自作する方法を説明しています。  
[https://www.youtube.com/watch?v=xgPrMP48W-M&list=PLkR3LRtxAZfod8TvcsKU7IEWeAO5fhcOe&index=3](https://www.youtube.com/watch?v=xgPrMP48W-M&list=PLkR3LRtxAZfod8TvcsKU7IEWeAO5fhcOe&index=3)

これを応用して、会員登録のPOST先を自作のURLにして、内部でAPIで会員登録して、別の画面に返すのはいかがでしょうか？（少々大がかりですが）

---

<div class="post-metadata">

**Author:** ![Jizo\_Inagaki](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/jizo_inagaki/32/149480_2.png) [@Jizo\_Inagaki](https://community.shopify.com/u/Jizo_Inagaki)\
**Post date:** [November 13, 2020, 5:55am UTC](https://community.shopify.com/t/topic/24258/5 "2020-11-13T05:55:11Z")

</div>

横から失礼します。

的外れでしたら申し訳ありませんが拝見していて思いついたことがありますので以下記載したいと思います。無理やりな方法ではありますが。

■案1

- 参考にされたサンプルコードでリダイレクト後の「会員登録完了ページ(/pages/register\_completed)」に、{% unless customer %}で囲んだJSを記載し、そのJSでさらにTOPページにリダイレクトさせる

意図としましては以下のようになります。

- 新規登録が正常に完了した場合はログイン状態になるので、{% unless customer %}で登録成功の可否を判別可能
- 登録完了後にすべて「会員登録完了ページ」にリダイレクトさせ、「会員登録完了ページ」内で{% unless customer %}によって状態を判別
- 登録完了していない場合には{% unless customer %}内のJSで「登録ページ」にリダイレクト

■案2

案1を考えた際に少し方向が違う別案を思いつきましたのでそちらも一応記載します。趣旨によっては以下も検討できるのではと思います。  
ページのタイトルやURLの名称と矛盾する状態になる可能性はありますが、JSのリダイレクトを使うよりはシンプルかもしれません。

- 「会員登録完了ページ」内の内容を{% if customer %}で分岐させ、「登録成功時」と「登録失敗時」の内容を出し分ける
- 失敗時の方には失敗した旨や再登録を促す文言を記載し、「登録ページ」へのリンクを設置

以上ですが趣旨や状況を勘違いしていましたら申し訳ありません。

---

<div class="post-metadata">

**Author:** ![junichiokamura](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/junichiokamura/32/299737_2.png) [@junichiokamura](https://community.shopify.com/u/junichiokamura)\
**Post date:** [November 13, 2020, 6:17am UTC](https://community.shopify.com/t/topic/24258/6 "2020-11-13T06:17:22Z")

</div>

確かに、Liquid でログイン済みかどうかを判定するのはいいアイディアですね！

他にも customer\_id とかいくつか判定方法ありますが、unless customer がシンプルで良さそうです。

---

<div class="post-metadata">

**Author:** ![toi4](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/toi4/32/122174_2.png) [@toi4](https://community.shopify.com/u/toi4)\
**Post date:** [November 13, 2020, 8:01am UTC](https://community.shopify.com/t/topic/24258/7 "2020-11-13T08:01:43Z")

</div>

ありがとうございます！案1でやりたかったことができました！
