{"id":301,"date":"2024-03-17T22:22:04","date_gmt":"2024-03-18T01:22:04","guid":{"rendered":"https:\/\/ventiladorcito.com\/blog\/?p=301"},"modified":"2024-03-17T22:22:04","modified_gmt":"2024-03-18T01:22:04","slug":"mascotas-perdidas-py-parte-v","status":"publish","type":"post","link":"https:\/\/ventiladorcito.com\/blog\/2024\/03\/mascotas-perdidas-py-parte-v\/","title":{"rendered":"Mascotas Perdidas Py &#8211; Parte V"},"content":{"rendered":"\n<p class=\"has-medium-font-size\"><strong>2 de diciembre<\/strong><\/p>\n\n\n\n<p>Crearemos un formulario sencillo de registro, para eso primero creamos una entrada en nuestro routes\/web.php<\/p>\n\n\n\n<pre title=\"routes\/web.php\" class=\"wp-block-code\"><code lang=\"php\" class=\"language-php line-numbers\">&lt;?php\nuse Laravel\\Fortify\\Features;\n\n$enableViews = config('fortify.views', true);\n\n\/\/ Registration...\nif (Features::enabled(Features::registration())) {\n    if ($enableViews) {\n        Route::get('\/register', [RegisterController::class, 'create'])\n            -&gt;middleware(\n                [\n                    'guest:'.config('fortify.guard')\n                ]\n            )\n            -&gt;name('register');\n    }\n\n    Route::post('\/register', [RegisterController::class, 'store'])\n        -&gt;middleware(\n            [\n                'guest:'.config('fortify.guard')\n            ]\n        );\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Ahora modificaremos nuestro archivo config\/fortify.php para que incluya este feature<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php line-numbers\">'features' =&gt; [\n        Features::registration(),\n],<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Ahora procederemos a crear nuestro controlador de Registro<\/p>\n\n\n\n<pre title=\"Auth\/RegisterController.php\" class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse Laravel\\Fortify\\Http\\Controllers\\RegisteredUserController;\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Contracts\\Auth\\StatefulGuard;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Routing\\Controller;\nuse Laravel\\Fortify\\Contracts\\CreatesNewUsers;\nuse Laravel\\Fortify\\Contracts\\RegisterResponse;\nuse Laravel\\Fortify\\Contracts\\RegisterViewResponse;\n\nclass RegisterController extends RegisteredUserController{\n\n    \/\/ public function __construct(StatefulGuard $guard)\n    \/\/ {\n    \/\/     parent::__construct($guard);\n    \/\/ }\n\n    \/**\n     * Show the registration view.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return \\Laravel\\Fortify\\Contracts\\RegisterViewResponse\n     *\/\n    public function create(Request $request): RegisterViewResponse\n    {\n        return parent::create($request);\n    }\n\n    \/**\n     * Create a new registered user.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Laravel\\Fortify\\Contracts\\CreatesNewUsers  $creator\n     * @return \\Laravel\\Fortify\\Contracts\\RegisterResponse\n     *\/\n    public function store(Request $request, CreatesNewUsers $creator): RegisterResponse\n    {\n        return parent::store($request,$creator);\n    }\n}<\/code><\/pre>\n\n\n\n<p>Este controlador es una implementaci\u00f3n que b\u00e1sicamente usa todas las funcionalidades de RegisteredUserController de Fortify, pero nos da la flexibilidad de poder cambiar o extenderlas. De momento lo dejo como est\u00e1.<\/p>\n\n\n\n<p>Ahora crearemos un formulario de registro, (que es una copia burda de nuestro formulario de registro pero con un campo extra que es el nombre y el campo de contrase\u00f1a<\/p>\n\n\n\n<pre title=\"auth\/register.blade.php\" class=\"wp-block-code\"><code lang=\"php\" class=\"language-php line-numbers\">&lt;!doctype html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"utf-8\"&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n        &lt;meta name=\"description\" content=\"Formulario Login, mascotas Perdidas\"&gt;\n        &lt;meta name=\"author\" content=\"Login,Mascotas Perdidas\"&gt;\n        &lt;title&gt;Register&lt;\/title&gt;\n\n        @vite('resources\/js\/app.js')\n\n        &lt;!-- Favicons --&gt;\n        {{-- &lt;link rel=\"apple-touch-icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/apple-touch-icon.png\" sizes=\"180x180\"&gt;\n        &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon-32x32.png\" sizes=\"32x32\" type=\"image\/png\"&gt;\n        &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon-16x16.png\" sizes=\"16x16\" type=\"image\/png\"&gt;\n        &lt;link rel=\"manifest\" href=\"\/docs\/5.3\/assets\/img\/favicons\/manifest.json\"&gt;\n        &lt;link rel=\"mask-icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/safari-pinned-tab.svg\" color=\"#712cf9\"&gt;\n        &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon.ico\"&gt; --}}\n        &lt;meta name=\"theme-color\" content=\"#712cf9\"&gt;\n        &lt;style&gt;\n            .bd-placeholder-img {\n                font-size: 1.125rem;\n                text-anchor: middle;\n                -webkit-user-select: none;\n                -moz-user-select: none;\n                user-select: none;\n            }\n\n            @media (min-width: 768px) {\n                .bd-placeholder-img-lg {\n                font-size: 3.5rem;\n                }\n            }\n\n            .b-example-divider {\n                height: 3rem;\n                background-color: rgba(0, 0, 0, .1);\n                border: solid rgba(0, 0, 0, .15);\n                border-width: 1px 0;\n                box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);\n            }\n\n            .b-example-vr {\n                flex-shrink: 0;\n                width: 1.5rem;\n                height: 100vh;\n            }\n\n            .bi {\n                vertical-align: -.125em;\n                fill: currentColor;\n            }\n\n            .nav-scroller {\n                position: relative;\n                z-index: 2;\n                height: 2.75rem;\n                overflow-y: hidden;\n            }\n\n            .nav-scroller .nav {\n                display: flex;\n                flex-wrap: nowrap;\n                padding-bottom: 1rem;\n                margin-top: -1px;\n                overflow-x: auto;\n                text-align: center;\n                white-space: nowrap;\n                -webkit-overflow-scrolling: touch;\n            }\n        &lt;\/style&gt;\n\n        &lt;style&gt;\n                \/* sign-in  *\/\n            html,body {\n            height: 100%;\n            }\n\n            body {\n            display: flex;\n            align-items: center;\n            padding-top: 40px;\n            padding-bottom: 40px;\n            background-color: #f5f5f5;\n            }\n\n            .form-signin {\n            max-width: 330px;\n            padding: 15px;\n            }\n\n            .form-signin .form-floating:focus-within {\n            z-index: 2;\n            }\n\n            .form-signin input[type=\"email\"] {\n            margin-bottom: -1px;\n            border-bottom-right-radius: 0;\n            border-bottom-left-radius: 0;\n            }\n\n            .form-signin input[type=\"password\"] {\n            margin-bottom: 10px;\n            border-top-left-radius: 0;\n            border-top-right-radius: 0;\n            }\n        &lt;\/style&gt;\n        &lt;!-- Custom styles for this template --&gt;\n        &lt;link href=\"sign-in.css\" rel=\"stylesheet\"&gt;\n    &lt;\/head&gt;\n    &lt;body class=\"text-center\"&gt;\n        \n        &lt;main class=\"form-signin w-100 m-auto\"&gt;\n            &lt;form method=\"POST\" action=\"{{route('register')}}\"&gt;\n                @csrf\n                {{-- &lt;img class=\"mb-4\" src=\"https:\/\/getbootstrap.com\/docs\/5.3\/assets\/brand\/bootstrap-logo.svg\" alt=\"\" width=\"72\" height=\"57\"&gt; --}}\n                &lt;h1 class=\"h3 mb-3 fw-normal\"&gt;Registro&lt;\/h1&gt;\n                @if(Session::has('result'))\n                    @if(Session::get('result'))\n                        \n                            &lt;div class=\"alert alert-success alert-dismissible fade show\" role=\"alert\"&gt;\n                                {{ nl2br(Session::get('message')) }}\n                                &lt;button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"&gt;&lt;\/button&gt;\n                            &lt;\/div&gt;\n                        @else\n                            &lt;div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\"&gt;\n                                {{ nl2br(Session::get('message')) }}\n                                &lt;button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"&gt;&lt;\/button&gt;\n                            &lt;\/div&gt;\n                        \n                    @endif\n                @endif\n                &lt;div class=\"form-floating\"&gt;\n                    &lt;input type=\"text\" class=\"form-control\" id=\"floatingInput\" placeholder=\"john doe\" value=\"{{old('email')}}\" name=\"name\"&gt;\n                    &lt;label for=\"floatingInput\"&gt;Name&lt;\/label&gt;\n                &lt;\/div&gt;\n                &lt;div class=\"form-floating\"&gt;\n                    &lt;input type=\"email\" class=\"form-control\" id=\"floatingInput\" placeholder=\"name@example.com\" value=\"{{old('email')}}\" name=\"email\"&gt;\n                    &lt;label for=\"floatingInput\"&gt;Email address&lt;\/label&gt;\n                &lt;\/div&gt;\n                &lt;div class=\"form-floating\"&gt;\n                    &lt;input type=\"password\" class=\"form-control\" id=\"floatingPassword\" placeholder=\"Password\" name=\"password\"&gt;\n                    &lt;label for=\"floatingPassword\"&gt;Password&lt;\/label&gt;\n                &lt;\/div&gt;\n                &lt;div class=\"form-floating\"&gt;\n                    &lt;input type=\"password\" class=\"form-control\" id=\"floatingPassword\" placeholder=\"Password Confirmation\" name=\"password_confirmation\"&gt;\n                    &lt;label for=\"floatingPassword\"&gt;Password Confirmation&lt;\/label&gt;\n                &lt;\/div&gt;\n\n                &lt;div class=\"form-check mb-3\"&gt;\n                    &lt;label&gt;\n                        &lt;input type=\"checkbox\" class=\"form-check-input\" name=\"accept_term_conditions\" &gt;I Accept the &lt;a href=\"#\"&gt;Terms and conditions&lt;\/a&gt;\n                    &lt;\/label&gt;\n                &lt;\/div&gt;\n                &lt;button class=\"w-100 btn btn-lg btn-primary\" type=\"submit\"&gt;Register&lt;\/button&gt;\n                &lt;p class=\"mt-5 mb-3 text-muted\"&gt;&amp;copy; 2017\u20132022&lt;\/p&gt;\n                @if ($errors-&gt;any())\n                    &lt;div class=\"alert alert-danger\"&gt;\n                        &lt;ul&gt;\n                            @foreach ($errors-&gt;all() as $error)\n                                &lt;li&gt;{{ $error }}&lt;\/li&gt;\n                            @endforeach\n                        &lt;\/ul&gt;\n                    &lt;\/div&gt;\n                @endif\n            &lt;\/form&gt;\n        &lt;\/main&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>A nuestras rutas de web.php agregaremos las caracter\u00edsticas de verificaci\u00f3n de email<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ Email Verification...\nif (Features::enabled(Features::emailVerification())) {\n    if ($enableViews) {\n        Route::get('\/email\/verify', [EmailVerificationPromptController::class, '__invoke'])\n            -&gt;middleware([config('fortify.auth_middleware', 'auth').':'.config('fortify.guard')])\n            -&gt;name('verification.notice');\n    }\n\n    Route::get('\/email\/verify\/{id}\/{hash}', [VerifyEmailController::class, '__invoke'])\n        -&gt;middleware([config('fortify.auth_middleware', 'auth').':'.config('fortify.guard'), 'signed', 'throttle:'.$verificationLimiter])\n        -&gt;name('verification.verify');\n\n    Route::post('\/email\/verification-notification', [EmailVerificationNotificationController::class, 'store'])\n        -&gt;middleware([config('fortify.auth_middleware', 'auth').':'.config('fortify.guard'), 'throttle:'.$verificationLimiter])\n        -&gt;name('verification.send');\n\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>A nuestro modelo de User.php le diremos que debe implementar la verificaci\u00f3n de email <strong>MustVerifyEmail<\/strong><\/p>\n\n\n\n<pre title=\"models\/User.php\" class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Laravel\\Sanctum\\HasApiTokens;\n\nclass User extends Authenticatable  implements MustVerifyEmail\n\n{\n    use HasApiTokens, HasFactory, Notifiable;<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>A nuestro Actions\/Fortify\/CreateNewUser.php le agregaremos la regla de que debe aceptar los terminos y condiciones (<em>accept_term_conditions&#8217;=&gt;[&#8216;accepted&#8217;], <\/em>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">&lt;?php\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Validation\\Rule;\nuse Laravel\\Fortify\\Contracts\\CreatesNewUsers;\n\nclass CreateNewUser implements CreatesNewUsers\n{\n    use PasswordValidationRules;\n\n    \/**\n     * Validate and create a newly registered user.\n     *\n     * @param  array&lt;string, string&gt;  $input\n     *\/\n    public function create(array $input): User\n    {\n        Validator::make($input, [\n            'name' =&gt; ['required', 'string', 'max:255'],\n            'email' =&gt; [\n                'required',\n                'string',\n                'email',\n                'max:255',\n                Rule::unique(User::class),\n            ],\n            'accept_term_conditions'=&gt;['accepted'],\n            'password' =&gt; $this-&gt;passwordRules(),\n        ])-&gt;validate();\n\n        return User::create([\n            'name' =&gt; $input['name'],\n            'email' =&gt; $input['email'],\n            'password' =&gt; Hash::make($input['password']),\n        ]);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>En nuestro archivo config\/fortify.php activamos el feature de emailVerification<\/p>\n\n\n\n<pre title=\"config\/fortify.php\" class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">'features' =&gt; [\n        Features::registration(),\n        \/\/Features::resetPasswords(),\n        Features::emailVerification(),\n        \/\/ Features::updateProfileInformation(),\n        \/\/ Features::updatePasswords(),\n        \/\/ Features::twoFactorAuthentication([\n        \/\/     'confirm' =&gt; true,\n        \/\/     'confirmPassword' =&gt; true,\n        \/\/     \/\/ 'window' =&gt; 0,\n        \/\/ ]),\n    ],<\/code><\/pre>\n\n\n\n<p>Tambi\u00e9n crearemos la vista que muestra el enlace para enviar el enlace de verificaci\u00f3n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">&lt;!doctype html&gt;\n&lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"utf-8\"&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n        &lt;meta name=\"description\" content=\"Formulario Login, mascotas Perdidas\"&gt;\n        &lt;meta name=\"author\" content=\"Login,Mascotas Perdidas\"&gt;\n        &lt;title&gt;Signin Template \u00b7 Bootstrap v5.3&lt;\/title&gt;\n\n        @vite('resources\/js\/app.js')\n\n        &lt;!-- Favicons --&gt;\n        {{-- &lt;link rel=\"apple-touch-icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/apple-touch-icon.png\" sizes=\"180x180\"&gt;\n        &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon-32x32.png\" sizes=\"32x32\" type=\"image\/png\"&gt;\n        &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon-16x16.png\" sizes=\"16x16\" type=\"image\/png\"&gt;\n        &lt;link rel=\"manifest\" href=\"\/docs\/5.3\/assets\/img\/favicons\/manifest.json\"&gt;\n        &lt;link rel=\"mask-icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/safari-pinned-tab.svg\" color=\"#712cf9\"&gt;\n        &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon.ico\"&gt; --}}\n        &lt;meta name=\"theme-color\" content=\"#712cf9\"&gt;\n        \n        &lt;!-- Custom styles for this template --&gt;\n        &lt;link href=\"sign-in.css\" rel=\"stylesheet\"&gt;\n    &lt;\/head&gt;\n    &lt;body class=\"text-center\"&gt;\n        &lt;div class=\"container\"&gt;\n            &lt;div class=\"row justify-content-center\"&gt;\n                &lt;div class=\"col-md-8\"&gt;\n                    &lt;div class=\"card\"&gt;\n                        &lt;div class=\"card-header\"&gt;{{ __('Verify Your Email Address') }}&lt;\/div&gt;\n        \n                        &lt;div class=\"card-body\"&gt;\n                            @if (session('resent'))\n                                &lt;div class=\"alert alert-success\" role=\"alert\"&gt;\n                                    {{ __('A fresh verification link has been sent to your email address.') }}\n                                &lt;\/div&gt;\n                            @endif\n        \n                            {{ __('Before proceeding, please check your email for a verification link.') }}\n                            {{ __('If you did not receive the email') }},\n                            &lt;form class=\"d-inline\" method=\"POST\" action=\"{{ route('verification.send') }}\"&gt;\n                                @csrf\n                                &lt;button type=\"submit\" class=\"btn btn-link p-0 m-0 align-baseline\"&gt;{{ __('click here to request another') }}&lt;\/button&gt;.\n                            &lt;\/form&gt;\n                        &lt;\/div&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Por \u00faltimo y para probar estas caracter\u00edsticas les recomendar\u00eda que contraten un servicio gratuito como mailtrap.io que permite simular el env\u00edo de emails y guardarlo en el .env del proyecto<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">MAIL_HOST=sandbox.smtp.mailtrap.io\nMAIL_PORT=2525\nMAIL_USERNAME=xxxUserxxx\nMAIL_PASSWORD=xxxPassxxx<\/code><\/pre>\n\n\n\n<p>Luego de eso podr\u00e1n ver un mail como este luego de un registro exitoso <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/12\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"626\" height=\"608\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/12\/image-1.png\" alt=\"\" class=\"wp-image-307\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/12\/image-1.png 626w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/12\/image-1-300x291.png 300w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/12\/image-1-624x606.png 624w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><\/a><\/figure>\n\n\n\n<p>En la siguiente entrada prepararemos un layout que podamos usar para ver los reportes de nuestros usuarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>2 de diciembre Crearemos un formulario sencillo de registro, para eso primero creamos una entrada en nuestro routes\/web.php Ahora modificaremos nuestro archivo config\/fortify.php para que incluya este feature Ahora procederemos a crear nuestro controlador de Registro Este controlador es una implementaci\u00f3n que b\u00e1sicamente usa todas las funcionalidades de RegisteredUserController de Fortify, pero nos da la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-301","post","type-post","status-publish","format-standard","hentry","category-miscelaneas"],"_links":{"self":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts\/301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/comments?post=301"}],"version-history":[{"count":5,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts\/301\/revisions"}],"predecessor-version":[{"id":326,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts\/301\/revisions\/326"}],"wp:attachment":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/media?parent=301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/categories?post=301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/tags?post=301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}