{"id":1211,"date":"2019-04-11T18:00:31","date_gmt":"2019-04-11T09:00:31","guid":{"rendered":"http:\/\/idealive.jp\/blog\/?p=1211"},"modified":"2019-04-11T06:52:49","modified_gmt":"2019-04-10T21:52:49","slug":"laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc","status":"publish","type":"post","link":"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/","title":{"rendered":"Laravel\u3067SMS\u8a8d\u8a3c"},"content":{"rendered":"<p>\u3069\u3046\u3082\u3053\u3093\u306b\u3061\u306f<\/p>\n<p>\u5148\u65e5\u306e\u6295\u7a3f\u3067\u3001\u30e1\u30fc\u30eb\u8a8d\u8a3c\u3092\u3084\u3063\u3066\u307f\u307e\u3057\u305f\u304c\u3001<br \/>\n\u4eca\u56de\u306fTwilio\u3092\u4f7f\u3063\u305fSMS\u8a8d\u8a3c\u3092\u3084\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>Twilio\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u3001\u3057\u3063\u304b\u308a\u3084\u308a\u65b9\u66f8\u3044\u3066\u3042\u308b\u306e\u3067\u3001<br \/>\n\u305d\u3063\u3061\u898b\u3066\u3082\u3089\u3063\u305f\u307b\u3046\u304c\u65e9\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001<br \/>\n\u79c1\u304c\u3084\u3063\u305f\u3053\u3068\u305f\u3061\u3092\u5099\u5fd8\u9332\u3068\u3057\u3066\u3002<\/p>\n<p>\u3053\u3053\u3092\u53c2\u8003\u306b\u3057\u307e\u3057\u305f\u3002 \u21d2 <a href=\"https:\/\/jp.twilio.com\/docs\/authy\/tutorials\/account-verification-php-laravel\" target=\"_blank\" rel=\"noopener\">Account Verification with Authy, PHP and Laravel &#8211; Twilio<\/a><\/p>\n<hr \/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u76ee\u6b21<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E7%9B%AE%E6%A8%99\" >\u76ee\u6a19<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E6%B5%81%E3%82%8C\" >\u6d41\u308c<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%81%9D%E3%81%AE%E4%BB%96\" >\u305d\u306e\u4ed6<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#AuthyAuthyApi%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%8A%E3%82%88%E3%81%B3%E8%A8%AD%E5%AE%9A\" >Authy\\AuthyApi\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304a\u3088\u3073\u8a2d\u5b9a<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#Composer\" >Composer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#env%E3%82%92%E4%BF%AE%E6%AD%A3\" >.env\u3092\u4fee\u6b63<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%81%AB%E7%99%BB%E9%8C%B2\" >\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u767b\u9332<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#appProvidersAuthyApiProviderphp\" >app\/Providers\/AuthyApiProvider.php<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#configappphp\" >config\/app.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E5%A4%89%E6%9B%B4\" >\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u5909\u66f4<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90\" >\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#resourcesviewsauthsmssendbladephp\" >resources\/views\/auth\/sms\/send.blade.php<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#resourcesviewsauthsmsverifybladephp\" >resources\/views\/auth\/sms\/verify.blade.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E4%BD%9C%E6%88%90\" >\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u4f5c\u6210<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#appHttpCOntrollersAuthSmsVerificationControllerphp\" >app\/Http\/COntrollers\/Auth\/SmsVerificationController.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0\" >\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#routeswebphp\" >routes\/web.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E3%83%9F%E3%83%89%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2\" >\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#appHttpMiddlewaresEnsureSmsIsVerifiedphp\" >app\/Http\/Middlewares\/EnsureSmsIsVerified.php<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#appHttpKernelphp\" >app\/Http\/Kernel.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/#%E7%B5%90%E6%9E%9C\" >\u7d50\u679c<\/a><\/li><\/ul><\/nav><\/div>\n<h5><span class=\"ez-toc-section\" id=\"%E7%9B%AE%E6%A8%99\"><\/span>\u76ee\u6a19<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u3053\u3093\u306a\u611f\u3058\u3067\u884c\u304d\u307e\u3059\u3002\u30dc\u30bf\u30f3\u306e\u9069\u5f53\u306a\u82f1\u8a9e\u306f\u3054\u611b\u5b0c\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"%E6%B5%81%E3%82%8C\"><\/span>\u6d41\u308c<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>\u30fb\u30e6\u30fc\u30b6\u767b\u9332\u753b\u9762<br \/>\n\u21d2 \u3053\u308c\u3001Laravel\u306emake:auth\u3067\u4f5c\u3089\u308c\u308b\u30a2\u30ec\u3092\u305d\u306e\u307e\u307e<br \/>\n\u21d2 \u767b\u9332\u3067\u304d\u305f\u3089\u96fb\u8a71\u756a\u53f7\u5165\u529b\u3078<br \/>\n\u30fb\u96fb\u8a71\u756a\u53f7\u5165\u529b\u753b\u9762<br \/>\n\u21d2 \u96fb\u8a71\u756a\u53f7\u3092\u5165\u529b\u3057\u3066\u300cSend SMS\u300d\u3092\u62bc\u3059\u3068SMS\u3092\u9001\u4fe1<br \/>\n\u30fb\u30c8\u30fc\u30af\u30f3\u5165\u529b\u753b\u9762<br \/>\n\u21d2 \u30c8\u30fc\u30af\u30f3\u3092\u5165\u529b\u3057\u3066\u300cVerify\u300d\u3092\u62bc\u3059\u3068\u8a8d\u8a3c\u3059\u308b<br \/>\n\u21d2 \u300cResend SMS\u300d\u3092\u62bc\u3059\u3068\u96fb\u8a71\u756a\u53f7\u5165\u529b\u306b\u623b\u308b<br \/>\n\u21d2 \u300cVerifiing Via Phone\u300d\u3092\u62bc\u3059\u3068\u5165\u529b\u3057\u3066\u3044\u305f\u96fb\u8a71\u756a\u53f7\u306b\u96fb\u8a71\u304c\u304b\u304b\u3063\u3066\u304f\u308b<\/p>\n<h6><span class=\"ez-toc-section\" id=\"%E3%81%9D%E3%81%AE%E4%BB%96\"><\/span>\u305d\u306e\u4ed6<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>\u30fbSMS\u8a8d\u8a3c\u304c\u7d42\u308f\u3063\u3066\u306a\u3044\u3068\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u3088\u3046\u306bmiddleware\u3092\u4f5c\u308b\u3002<br \/>\n\u21d2\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u306f\u30c8\u30fc\u30af\u30f3\u5165\u529b\u753b\u9762<\/p>\n<p>\u3067\u306f\u3001\u884c\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"AuthyAuthyApi%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%8A%E3%82%88%E3%81%B3%E8%A8%AD%E5%AE%9A\"><\/span>Authy\\AuthyApi\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304a\u3088\u3073\u8a2d\u5b9a<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u306a\u306b\u306f\u306a\u304f\u3068\u3082\u3001\u30b3\u30ec\u3067\u3059\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"Composer\"><\/span>Composer<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<p><code>composer require authy\/php<\/code><\/p>\n<h6><span class=\"ez-toc-section\" id=\"env%E3%82%92%E4%BF%AE%E6%AD%A3\"><\/span>.env\u3092\u4fee\u6b63<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Twilio\u3067\u4f5c\u308bAuthy PRODUCTION API KEY \u304c\u5fc5\u8981\u3067\u3059\u3002<br \/>\n\u4f5c\u308a\u65b9\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u304a\u4efb\u305b\u3067\u3059\u3002<\/p>\n<p><code>AUTHY_API_KEY=[Your Authy PRODUCTION API KEY]<\/code><\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%81%AB%E7%99%BB%E9%8C%B2\"><\/span>\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u767b\u9332<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u5148\u307b\u3069\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u8a2d\u5b9a\u3057\u305fAuthy API\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b<br \/>\n\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"appProvidersAuthyApiProviderphp\"><\/span>app\/Providers\/AuthyApiProvider.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">&lt;?php\r\n\r\nnamespace App\\Providers;\r\n\r\nuse Authy\\AuthyApi;\r\nuse Illuminate\\Support\\ServiceProvider;\r\n\r\nclass AuthyApiProvider extends ServiceProvider\r\n{\r\n    \/**\r\n     * Register services.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function register()\r\n    {\r\n        $this-&gt;app-&gt;singleton(AuthyApi::class, function ($app) {\r\n            $authyKey = getenv('AUTHY_API_KEY') or die(\r\n                \"You must specify your api key for Authy. \" .\r\n                \"Visit https:\/\/dashboard.authy.com\/\"\r\n            );\r\n\r\n            return new AuthyApi($authyKey);\r\n\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * Bootstrap services.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function boot()\r\n    {\r\n        \/\/\r\n    }\r\n}\r\n<\/pre>\n<h6><span class=\"ez-toc-section\" id=\"configappphp\"><\/span>config\/app.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">    'providers' =&gt; [\r\n        \/\/ \u9014\u4e2d\u306f\u7701\u7565\r\n        \\App\\Providers\\AuthyApiProvider::class, \/\/ &lt;- \u8ffd\u8a18\u306d\r\n    ],<\/pre>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E5%A4%89%E6%9B%B4\"><\/span>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u5909\u66f4<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u4eca\u56de\u306fUsers\u30c6\u30fc\u30d6\u30eb\u3092\u76f4\u63a5\u307e\u3055\u3050\u308a\u307e\u3057\u305f\u3002<\/p>\n<p><code>php artisan make:migration prepare_users_table_for_sms_verify --table=users<\/code><\/p>\n<p>migration\u30d5\u30a1\u30a4\u30eb\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true  \">&lt;?php\r\n\r\nuse Illuminate\\Support\\Facades\\Schema;\r\nuse Illuminate\\Database\\Schema\\Blueprint;\r\nuse Illuminate\\Database\\Migrations\\Migration;\r\n\r\nclass PrepareUsersTableForSmsVerify extends Migration\r\n{\r\n    \/**\r\n     * Run the migrations.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function up()\r\n    {\r\n        \/\/\r\n        Schema::table('users', function (Blueprint $table) {\r\n            $table-&gt;string('phone_number')-&gt;nullable()-&gt;comment('\u96fb\u8a71\u756a\u53f7');\r\n            $table-&gt;string('country_code')-&gt;nullable()-&gt;comment('\u56fd\u756a\u53f7');\r\n            $table-&gt;string('authy_id')-&gt;nullable()-&gt;comment('Authy ID');\r\n            $table-&gt;boolean('sms_verified')-&gt;default(false)-&gt;comment('SMS\u8a8d\u8a3c\u6e08\u307f');\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * Reverse the migrations.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function down()\r\n    {\r\n        \/\/\r\n        Schema::table('users', function (Blueprint $table) {\r\n            $table-&gt;dropColumn('phone_number');\r\n            $table-&gt;dropColumn('country_code');\r\n            $table-&gt;dropColumn('authy_id');\r\n            $table-&gt;dropColumn('sms_verified');\r\n        });\r\n    }\r\n}\r\n<\/pre>\n<p>\u5fd8\u308c\u305a\u306b\u3001migrate\u3057\u307e\u3059\u3002<br \/>\n<code>php artisan migrate<\/code><\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90\"><\/span>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u4eca\u56de\u306f\u3001\u56fd\u756a\u53f7\u309281\uff08\u65e5\u672c\uff09\u3092\u56fa\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u3001\u5165\u529b\u306b\u306a\u3063\u3066\u3082\u3088\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>\u30c7\u30b6\u30a4\u30f3\u3068\u304b\u3001\u305d\u3093\u306a\u3061\u3063\u3055\u3044\u3053\u3068\u306f\u6c17\u306b\u3059\u308b\u306a\uff01<br \/>\n<del datetime=\"2019-04-10T10:34:33+00:00\">\u305d\u308c\u308f\u304b\u3061\u3053\u308f\u304b\u3061\u3053\u30fc<\/del><\/p>\n<h6><span class=\"ez-toc-section\" id=\"resourcesviewsauthsmssendbladephp\"><\/span>resources\/views\/auth\/sms\/send.blade.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">@extends('layouts.app')\r\n\r\n@section('content')\r\n&lt;div class=\"container\"&gt;\r\n    &lt;div class=\"row justify-content-center\"&gt;\r\n        &lt;div class=\"col-md-8\"&gt;\r\n            &lt;div class=\"card\"&gt;\r\n                &lt;div class=\"card-header\"&gt;{{ __('Phone Number') }}&lt;\/div&gt;\r\n\r\n                &lt;div class=\"card-body\"&gt;\r\n                    &lt;form method=\"POST\" action=\"{{ route('smsverification.send') }}\"&gt;\r\n                        @csrf\r\n\r\n                        &lt;div class=\"form-group row\"&gt;\r\n                            &lt;label for=\"phone_number\" class=\"col-md-4 col-form-label text-md-right\"&gt;{{ __('Phone Number') }}&lt;\/label&gt;\r\n\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;input id=\"phone_number\" type=\"text\" class=\"form-control{{ $errors-&gt;has('phone_number') ? ' is-invalid' : '' }}\" name=\"phone_number\" value=\"{{ old('phone_number') }}\" required autofocus&gt;\r\n\r\n                                @if ($errors-&gt;has('phone_number'))\r\n                                    &lt;span class=\"invalid-feedback\" role=\"alert\"&gt;\r\n                                        &lt;strong&gt;{{ $errors-&gt;first('phone_number') }}&lt;\/strong&gt;\r\n                                    &lt;\/span&gt;\r\n                                @endif\r\n                            &lt;\/div&gt;\r\n                            {{--\u56fd\u756a\u53f7\u306f\u65e5\u672c\u56fa\u5b9a--}}\r\n                            &lt;input type=\"hidden\" id=\"country_code\" name=\"country_code\" value=\"81\" \/&gt;\r\n                        &lt;\/div&gt;\r\n\r\n                        &lt;div class=\"form-group row mb-0\"&gt;\r\n                            &lt;div class=\"col-md-6 offset-md-4\"&gt;\r\n                                &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;\r\n                                    {{ __('Send SMS') }}\r\n                                &lt;\/button&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                    &lt;\/form&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n@endsection\r\n<\/pre>\n<h6><span class=\"ez-toc-section\" id=\"resourcesviewsauthsmsverifybladephp\"><\/span>resources\/views\/auth\/sms\/verify.blade.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">@extends('layouts.app')\r\n\r\n@section('content')\r\n&lt;div class=\"container\"&gt;\r\n    &lt;div class=\"row justify-content-center\"&gt;\r\n        &lt;div class=\"col-md-8\"&gt;\r\n            &lt;div class=\"card\"&gt;\r\n                &lt;div class=\"card-header\"&gt;{{ __('Verify') }}&lt;\/div&gt;\r\n\r\n                &lt;div class=\"card-body\"&gt;\r\n                    &lt;form method=\"POST\" action=\"{{ route('smsverification.verify') }}\"&gt;\r\n                        @csrf\r\n\r\n                        &lt;div class=\"form-group row\"&gt;\r\n                            &lt;label for=\"phone_number\" class=\"col-md-4 col-form-label text-md-right\"&gt;{{ __('Token') }}&lt;\/label&gt;\r\n\r\n                            &lt;div class=\"col-md-6\"&gt;\r\n                                &lt;input id=\"token\" type=\"text\" class=\"form-control{{ $errors-&gt;has('token') ? ' is-invalid' : '' }}\" name=\"token\" value=\"{{ old('token') }}\" required autofocus&gt;\r\n\r\n                                @if ($errors-&gt;has('token'))\r\n                                    &lt;span class=\"invalid-feedback\" role=\"alert\"&gt;\r\n                                    &lt;strong&gt;{{ $errors-&gt;first('token') }}&lt;\/strong&gt;\r\n                                &lt;\/span&gt;\r\n                                @endif\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n\r\n                        &lt;div class=\"form-group row mb-0\"&gt;\r\n                            &lt;div class=\"col-md-6 offset-md-4\"&gt;\r\n                                &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;\r\n                                    {{ __('Verify') }}\r\n                                &lt;\/button&gt;\r\n                            &lt;\/div&gt;\r\n                        &lt;\/div&gt;\r\n                    &lt;\/form&gt;\r\n                &lt;\/div&gt;\r\n                &lt;div class=\"card-body\"&gt;\r\n                    &lt;div class=\"form-group row mb-0\"&gt;\r\n                        &lt;div class=\"col-md-6 offset-md-4\"&gt;\r\n                            &lt;form action=\"{{ route('smsverification.send') }}\"&gt;\r\n                                &lt;button class=\"btn btn-primary\"&gt;\r\n                                    {{ __('Resend SMS') }}\r\n                                &lt;\/button&gt;\r\n                            &lt;\/form&gt;\r\n                        &lt;\/div&gt;\r\n                        &lt;div class=\"col-md-6 offset-md-4\"&gt;\r\n                            &lt;form method=\"POST\" action=\"{{ route('smsverification.call') }}\"&gt;\r\n                                @csrf\r\n                                &lt;button class=\"btn btn-primary\"&gt;\r\n                                    {{ __('Verifiing Via Phone') }}\r\n                                &lt;\/button&gt;\r\n                            &lt;\/form&gt;\r\n                        &lt;\/div&gt;\r\n                    &lt;\/div&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/div&gt;\r\n        &lt;\/div&gt;\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n@endsection\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E4%BD%9C%E6%88%90\"><\/span>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u4f5c\u6210<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u3042\u307e\u308a\u96e3\u3057\u304f\u8003\u3048\u3066\u307e\u305b\u3093\u3002\u30b5\u30f3\u30d7\u30eb\u306e\u30b3\u30fc\u30c9\u3092\u898b\u306a\u304c\u3089\u3001\u5408\u3046\u3088\u3046\u306b\u3061\u3087\u3053\u3061\u3087\u3053\u76f4\u3057\u305f\u3060\u3051\u3067\u3059\u3002<\/p>\n<p>\u7279\u7b46\u3059\u3079\u304d\u306f\u3001<br \/>\n\u30fb\u5404\u30a2\u30af\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u306e\u5f15\u6570\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u767b\u9332\u3057\u305fAuthyApi\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u767b\u5834\u3057\u3066\u3044\u308b\u3053\u3068<br \/>\n\u21d2\u672c\u5f53\u306f\u5fc5\u8981\u306a\u3068\u3053\u308d\u3060\u3051\u3067\u3088\u3044\u306e\u3067\u3059\u304c\u3001\u52e2\u3044\u3067\u3002<br \/>\n\u30fb71\u884c\u76ee\u300c$authyApi-&gt;requestSms($user-&gt;authy_id);\u300d\u3067SMS\u3092\u9001\u4fe1\u3057\u3066\u3044\u308b\u3002<br \/>\n\u30fb126\u884c\u76ee\u300c$authyApi-&gt;phoneCall($user-&gt;authy_id);\u300d\u3067\u96fb\u8a71\u3092\u304b\u3051\u3066\u3044\u308b\u3002<br \/>\n\u3068\u3044\u3063\u305f\u3068\u3053\u308d\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"appHttpCOntrollersAuthSmsVerificationControllerphp\"><\/span>app\/Http\/COntrollers\/Auth\/SmsVerificationController.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">&lt;?php\r\n\r\nnamespace App\\Http\\Controllers\\Auth;\r\n\r\nuse App\\User;\r\nuse Authy\\AuthyApi;\r\nuse Illuminate\\Auth\\Events\\Verified;\r\nuse Illuminate\\Http\\Request;\r\nuse App\\Http\\Controllers\\Controller;\r\nuse Illuminate\\Support\\Facades\\Auth;\r\nuse Illuminate\\Support\\MessageBag;\r\n\r\nclass SmsVerificationController extends Controller\r\n{\r\n    \/**\r\n     * Create a new controller instance.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function __construct()\r\n    {\r\n        $this-&gt;middleware('auth');\r\n        $this-&gt;middleware('throttle:6,1')-&gt;only('verify', 'send');\r\n    }\r\n\r\n    \/**\r\n     * Show the form for sms verification.\r\n     *\r\n     * @param  \\Illuminate\\Http\\Request  $request\r\n     * @return \\Illuminate\\Http\\Response\r\n     *\/\r\n    public function showRegisterPhoneNumberForm(Request $request) {\r\n        return $request-&gt;user()-&gt;sms_verified\r\n                    ? redirect()-&gt;intended('\/')\r\n                    : view('auth.sms.send');\r\n    }\r\n\r\n    \/**\r\n     * Show the form for sms verification.\r\n     *\r\n     * @param  \\Illuminate\\Http\\Request $request\r\n     * @param AuthyApi $authyApi\r\n     * @return \\Illuminate\\Http\\Response\r\n     *\r\n     * @throws \\Illuminate\\Validation\\ValidationException\r\n     *\/\r\n    public function send(Request $request, AuthyApi $authyApi) {\r\n        $this-&gt;validate($request, [\r\n            'phone_number' =&gt; 'required|numeric',\r\n            'country_code' =&gt; 'required',\r\n        ]);\r\n\r\n        $user = Auth::user();\r\n\r\n        $authyUser = $authyApi-&gt;registerUser(\r\n            $user-&gt;email,\r\n            $request-&gt;input('phone_number'),\r\n            $request-&gt;input('country_code')\r\n        );\r\n\r\n        if ($authyUser-&gt;ok()) {\r\n            $user-&gt;phone_number = $request-&gt;input('phone_number');\r\n            $user-&gt;country_code = $request-&gt;input('country_code');\r\n            $user-&gt;authy_id = $authyUser-&gt;id();\r\n            $user-&gt;save();\r\n            $request-&gt;session()-&gt;flash(\r\n                'status',\r\n                \"User created successfully\"\r\n            );\r\n\r\n            $sms = $authyApi-&gt;requestSms($user-&gt;authy_id);\r\n            return redirect()-&gt;route('smsverification.verify');\r\n        } else {\r\n            $errors = $this-&gt;getAuthyErrors($authyUser-&gt;errors());\r\n            return view('auth.sms.send', ['errors' =&gt; new MessageBag($errors)]);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * @param Request $request\r\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\Http\\RedirectResponse|\\Illuminate\\View\\View\r\n     *\/\r\n    public function showVerificationForm(Request $request) {\r\n        return $request-&gt;user()-&gt;sms_verified\r\n            ? redirect()-&gt;intended('\/')\r\n            : view('auth.sms.verify');\r\n    }\r\n\r\n    \/**\r\n     * @param Request $request\r\n     * @param AuthyApi $authyApi\r\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\Http\\RedirectResponse|\\Illuminate\\View\\View\r\n     * @throws \\Illuminate\\Validation\\ValidationException\r\n     *\/\r\n    public function verify(Request $request, AuthyApi $authyApi) {\r\n        $this-&gt;validate($request, [\r\n            'token' =&gt; 'required',\r\n        ]);\r\n\r\n        $user = Auth::user();\r\n        $token = $request-&gt;input('token');\r\n        $verification = $authyApi-&gt;verifyToken($user-&gt;authy_id, $token);\r\n\r\n        if ($verification-&gt;ok()) {\r\n            $user-&gt;sms_verified = true;\r\n            $user-&gt;save();\r\n            event(new Verified($request-&gt;user()));\r\n\r\n            return redirect()-&gt;intended('\/');\r\n\r\n        } else {\r\n            $errors = $this-&gt;getAuthyErrors($verification-&gt;errors());\r\n            return view('auth.sms.verify', ['errors' =&gt; new MessageBag($errors)]);\r\n        }\r\n\r\n    }\r\n\r\n    \/**\r\n     * @param Request $request\r\n     * @param AuthyApi $authyApi\r\n     *\r\n     * @return \\Authy\\AuthyResponse\r\n     *\/\r\n    public function ringPhone(Request $request, AuthyApi $authyApi) {\r\n        $user = Auth::user();\r\n        $response = $authyApi-&gt;phoneCall($user-&gt;authy_id);\r\n        if ($response-&gt;ok()) {\r\n            return back();\r\n        } else {\r\n            return view('auth.sms.verify', ['errors' =&gt; new MessageBag($this-&gt;getAuthyErrors($response-&gt;errors()))]);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * @param $authyErrors\r\n     * @return array\r\n     *\/\r\n    private function getAuthyErrors($authyErrors)\r\n    {\r\n        $errors = [];\r\n        foreach ($authyErrors as $field =&gt; $message) {\r\n            array_push($errors, $field . ': ' . $message);\r\n        }\r\n        return $errors;\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>\u3042\u3068\u3001\u767b\u9332\u6642\u306b\u96fb\u8a71\u756a\u53f7\u5165\u529b\u5074\u306b\u6d41\u3057\u305f\u3044\u306e\u3067\u3001RegisterController\u306b\u3061\u3087\u3044\u3063\u3068\u8ffd\u8a18\u3002<br \/>\n\u767b\u9332\u5f8c\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3059\u308b\u3060\u3051\u3067\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true \">    \/**\r\n     * @param Request $request\r\n     * @param $user\r\n     * @return \\Illuminate\\Http\\RedirectResponse\r\n     *\/\r\n    protected function registered(Request $request, $user)\r\n    {\r\n        return redirect()-&gt;route('smsverification.send');\r\n    }<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0\"><\/span>\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u3044\u3064\u3082\u306e\u3088\u3046\u306b\u3001\u8ffd\u8a18\u3067\u3059\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"routeswebphp\"><\/span>routes\/web.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">Route::get('sms\/send', 'Auth\\SmsVerificationController@showRegisterPhoneNumberForm')-&gt;name('smsverification.send');\r\nRoute::post('sms\/send', 'Auth\\SmsVerificationController@send');\r\nRoute::get('sms\/verify', 'Auth\\SmsVerificationController@showVerificationForm')-&gt;name('smsverification.verify');\r\nRoute::post('sms\/verify', 'Auth\\SmsVerificationController@verify');\r\nRoute::post('sms\/call', 'Auth\\SmsVerificationController@ringPhone')-&gt;name('smsverification.call');\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%83%9F%E3%83%89%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2\"><\/span>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u30e1\u30fc\u30eb\u8a8d\u8a3c\u306e\u6642\u306b\u304a\u4e16\u8a71\u306b\u306a\u3063\u305fEnsureEmailIsVerified\u3092\u53c2\u8003\u306b\u3001\u3053\u3093\u306a\u611f\u3058\u306b\u4ed5\u4e0a\u3052\u307e\u3057\u305f\u3002<br \/>\n\u8a8d\u8a3c\u3057\u3066\u3044\u306a\u3044\u3068\u304d\u3067\u3001\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u3092\u4e0e\u3048\u3089\u308c\u306a\u304b\u3063\u305f\u6642\u306f\u3001<br \/>\n\u30c8\u30fc\u30af\u30f3\u5165\u529b\u753b\u9762\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u305b\u307e\u3059\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"appHttpMiddlewaresEnsureSmsIsVerifiedphp\"><\/span>app\/Http\/Middlewares\/EnsureSmsIsVerified.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">&lt;?php\r\n\r\nnamespace App\\Http\\Middleware;\r\n\r\nuse App\\User;\r\nuse Closure;\r\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\r\nuse Illuminate\\Support\\Facades\\Auth;\r\nuse Illuminate\\Support\\Facades\\Redirect;\r\n\r\nclass EnsureSmsIsVerified\r\n{\r\n    \/**\r\n     * Handle an incoming request.\r\n     *\r\n     * @param  \\Illuminate\\Http\\Request  $request\r\n     * @param  \\Closure  $next\r\n     * @param  string  $redirectToRoute\r\n     * @return \\Illuminate\\Http\\Response|\\Illuminate\\Http\\RedirectResponse\r\n     *\/\r\n    public function handle($request, Closure $next, $redirectToRoute = null)\r\n    {\r\n        if (! $request-&gt;user() ||\r\n            ! $request-&gt;user()-&gt;sms_verified) {\r\n            return $request-&gt;expectsJson()\r\n                    ? abort(403, 'Your email address is not verified.')\r\n                    : Redirect::route($redirectToRoute ?: 'smsverification.verify');\r\n        }\r\n\r\n        return $next($request);\r\n    }\r\n\r\n}<\/pre>\n<p>\u3042\u3068\u306f\u3001Kernel.php\u306b\u767b\u9332\u3057\u307e\u3059\u3002<br \/>\n\u30e1\u30fc\u30eb\u8a8d\u8a3c\u306e\u304b\u308f\u308a\u306b\u3001\u3053\u3061\u3089\u3092\u4f7f\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"appHttpKernelphp\"><\/span>app\/Http\/Kernel.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true \">    \/**\r\n     * The application's route middleware.\r\n     *\r\n     * These middleware may be assigned to groups or used individually.\r\n     *\r\n     * @var array\r\n     *\/\r\n    protected $routeMiddleware = [\r\n        \/\/ \u9014\u4e2d\u306f\u7701\u7565\u3057\u3066\r\n\/\/        'verified' =&gt; \\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified::class, \/\/ &lt;- \u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3057\u3066\r\n        'verified' =&gt; \\App\\Http\\Middleware\\EnsureSmsIsVerified::class, \/\/ &lt;- \u3053\u3063\u3061\u306b\u3059\u3052\u304b\u3048\r\n    ];\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E7%B5%90%E6%9E%9C\"><\/span>\u7d50\u679c<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>SMS\u3001\u96fb\u8a71\u3068\u3082\u65e5\u672c\u8a9e\u3067\u3061\u3083\u3093\u3068\u3067\u304d\u307e\u3057\u305f\u3002<br \/>\n\u30b9\u30d0\u3089\u3057\u3044\u3002<\/p>\n<p>\u30e1\u30fc\u30eb\u8a8d\u8a3c\u3068SMS\u8a8d\u8a3c\u3001\u3069\u3063\u3061\u3082\u3067\u304d\u308b\u3088\u3046\u306b\u3082\u304c\u3093\u3070\u3063\u305f\u3089\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u3067\u306f\u3001\u307e\u305f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3069\u3046\u3082\u3053\u3093\u306b\u3061\u306f \u5148\u65e5\u306e\u6295\u7a3f\u3067\u3001\u30e1\u30fc\u30eb\u8a8d\u8a3c\u3092\u3084\u3063\u3066\u307f\u307e\u3057\u305f\u304c\u3001 \u4eca\u56de\u306fTwilio\u3092\u4f7f\u3063\u305fSMS\u8a8d\u8a3c\u3092\u3084\u3063\u3066\u307f\u307e\u3059\u3002 Twilio\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u3001\u3057\u3063\u304b\u308a\u3084\u308a\u65b9\u66f8\u3044\u3066\u3042\u308b\u306e\u3067\u3001 \u305d\u3063\u3061\u898b\u3066\u3082\u3089\u3063\u305f\u307b\u3046\u304c\u65e9\u3044\u304b\u3082\u3057\u308c\u307e&#8230;<a class=\"read-more-link button\" href=\"https:\/\/idealive.jp\/blog\/2019\/04\/11\/laravel%e3%81%a7sms%e8%aa%8d%e8%a8%bc\/\">\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":4,"featured_media":685,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,19],"tags":[],"class_list":["post-1211","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","category-php"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/posts\/1211"}],"collection":[{"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/comments?post=1211"}],"version-history":[{"count":8,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/posts\/1211\/revisions"}],"predecessor-version":[{"id":1218,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/posts\/1211\/revisions\/1218"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/media\/685"}],"wp:attachment":[{"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/media?parent=1211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/categories?post=1211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/tags?post=1211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}