|
536 | 536 | </span> |
537 | 537 | </a> |
538 | 538 |
|
| 539 | +</li> |
| 540 | + |
| 541 | + <li class="md-nav__item"> |
| 542 | + <a href="#usage" class="md-nav__link"> |
| 543 | + <span class="md-ellipsis"> |
| 544 | + ✅ Usage |
| 545 | + </span> |
| 546 | + </a> |
| 547 | + |
| 548 | + <nav class="md-nav" aria-label="✅ Usage"> |
| 549 | + <ul class="md-nav__list"> |
| 550 | + |
| 551 | + <li class="md-nav__item"> |
| 552 | + <a href="#examples" class="md-nav__link"> |
| 553 | + <span class="md-ellipsis"> |
| 554 | + Examples |
| 555 | + </span> |
| 556 | + </a> |
| 557 | + |
| 558 | +</li> |
| 559 | + |
| 560 | + </ul> |
| 561 | + </nav> |
| 562 | + |
539 | 563 | </li> |
540 | 564 |
|
541 | 565 | </ul> |
|
760 | 784 | </span> |
761 | 785 | </a> |
762 | 786 |
|
| 787 | +</li> |
| 788 | + |
| 789 | + <li class="md-nav__item"> |
| 790 | + <a href="#usage" class="md-nav__link"> |
| 791 | + <span class="md-ellipsis"> |
| 792 | + ✅ Usage |
| 793 | + </span> |
| 794 | + </a> |
| 795 | + |
| 796 | + <nav class="md-nav" aria-label="✅ Usage"> |
| 797 | + <ul class="md-nav__list"> |
| 798 | + |
| 799 | + <li class="md-nav__item"> |
| 800 | + <a href="#examples" class="md-nav__link"> |
| 801 | + <span class="md-ellipsis"> |
| 802 | + Examples |
| 803 | + </span> |
| 804 | + </a> |
| 805 | + |
| 806 | +</li> |
| 807 | + |
| 808 | + </ul> |
| 809 | + </nav> |
| 810 | + |
763 | 811 | </li> |
764 | 812 |
|
765 | 813 | </ul> |
@@ -803,11 +851,9 @@ <h3 id="update-your-dockerfile">Update Your Dockerfile</h3> |
803 | 851 |
|
804 | 852 | WORKDIR<span class="w"> </span>/var/lib/postgresql |
805 | 853 | </code></pre></div> |
806 | | -<p>Then rebuild:</p> |
| 854 | +<p>Then rebuild the Postgres imageand recreate the container:</p> |
807 | 855 | <div class="highlight"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>build<span class="w"> </span>postgres |
808 | | -</code></pre></div> |
809 | | -<p>And recreate the running container:</p> |
810 | | -<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>postgres |
| 856 | +docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>postgres |
811 | 857 | </code></pre></div> |
812 | 858 | <h2 id="2-add-migrations">➡️ 2. Add Migrations</h2> |
813 | 859 | <h3 id="load-required-extensions">📚 Load Required Extensions</h3> |
@@ -996,11 +1042,36 @@ <h2 id="3-run-the-migrations">▶️ 3. Run the Migrations</h2> |
996 | 1042 | applied.</p> |
997 | 1043 | <h2 id="4-add-the-auth-schema-to-postgrest">4. Add the Auth Schema to PostgREST</h2> |
998 | 1044 | <p>Add the auth schema to Postgres in <code>compose.yaml</code>:</p> |
999 | | -<div class="highlight"><pre><span></span><code><span class="nt">PGRST_DB_SCHEMAS</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">api,auth</span> |
| 1045 | +<div class="highlight"><pre><span></span><code><span class="nt">postgrest</span><span class="p">:</span> |
| 1046 | +<span class="w"> </span><span class="nt">environment</span><span class="p">:</span> |
| 1047 | +<span class="w"> </span><span class="nt">PGRST_DB_SCHEMAS</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">api,auth</span> |
| 1048 | +</code></pre></div> |
| 1049 | +<p>And recreate the PostgREST container:</p> |
| 1050 | +<div class="highlight"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>postgrest |
| 1051 | +</code></pre></div> |
| 1052 | +<h2 id="usage">✅ Usage</h2> |
| 1053 | +<p>To use the <code>auth</code> schema, requests <a href="https://docs.postgrest.org/en/stable/references/api/schemas.html#multiple-schemas">must include a |
| 1054 | +header</a>.</p> |
| 1055 | +<p>GET and HEAD requests should include the header:</p> |
| 1056 | +<div class="highlight"><pre><span></span><code>Accept-Profile: auth |
| 1057 | +</code></pre></div> |
| 1058 | +<p>Other methods (POST, PATCH, PUT and DELETE) should include:</p> |
| 1059 | +<div class="highlight"><pre><span></span><code>Content-Profile: auth |
| 1060 | +</code></pre></div> |
| 1061 | +<h3 id="examples">Examples</h3> |
| 1062 | +<p>Login:</p> |
| 1063 | +<div class="highlight"><pre><span></span><code>curl<span class="w"> </span><span class="se">\</span> |
| 1064 | +<span class="w"> </span>-H<span class="w"> </span><span class="s2">"Content-Profile: auth"</span><span class="w"> </span><span class="se">\</span> |
| 1065 | +<span class="w"> </span>-H<span class="w"> </span><span class="s2">"Content-Type: application/json"</span><span class="w"> </span><span class="se">\</span> |
| 1066 | +<span class="w"> </span>--data<span class="w"> </span><span class="s1">'{"user_": "demo", "pass": "demo"}'</span><span class="w"> </span><span class="se">\</span> |
| 1067 | +<span class="w"> </span>http://localhost/rpc/login |
| 1068 | +</code></pre></div> |
| 1069 | +<p>Get the refresh token inserted when logged in:</p> |
| 1070 | +<div class="highlight"><pre><span></span><code>bin/postgres<span class="w"> </span>psql<span class="w"> </span>-c<span class="w"> </span><span class="s1">'select token from auth.refresh_token order by created_at desc limit 1'</span> |
| 1071 | +</code></pre></div> |
| 1072 | +<p>Refresh the access token and extract the new token from the Set-Cookie header:</p> |
| 1073 | +<div class="highlight"><pre><span></span><code><span class="nb">export</span><span class="w"> </span><span class="nv">ACCESS_TOKEN</span><span class="o">=</span><span class="k">$(</span>curl<span class="w"> </span>--silent<span class="w"> </span>-i<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span>-H<span class="w"> </span><span class="s1">'Cookie: refresh_token='</span><span class="nv">$REFRESH_TOKEN</span><span class="s1">'; HttpOnly'</span><span class="w"> </span>http://localhost/rpc/refresh_token<span class="w"> </span><span class="p">|</span>sed<span class="w"> </span>-nE<span class="w"> </span><span class="s1">'s/^Set-Cookie: access_token=([^;]*).*/\1/p'</span><span class="k">)</span> |
1000 | 1074 | </code></pre></div> |
1001 | | -<p>✅ Usage</p> |
1002 | | -<p>Explain that all auth endpoints must have a certain header.</p> |
1003 | | -<p>Show example of using each endpoint.</p> |
1004 | 1075 | <ul> |
1005 | 1076 | <li>POST-ing a user.</li> |
1006 | 1077 | <li><code>/rpc/login</code></li> |
|
0 commit comments