{"id":1028,"date":"2019-03-22T15:00:47","date_gmt":"2019-03-22T06:00:47","guid":{"rendered":"http:\/\/idealive.jp\/blog\/?p=1028"},"modified":"2019-03-22T14:42:05","modified_gmt":"2019-03-22T05:42:05","slug":"laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b","status":"publish","type":"post","link":"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/","title":{"rendered":"Laravel\u3067\u30bd\u30fc\u30b7\u30e3\u30eb\u30ed\u30b0\u30a4\u30f3\u3092\u30b6\u30b6\u30c3\u3068\u4f5c\u308b"},"content":{"rendered":"<p>\u3069\u3046\u3082\u3053\u3093\u306b\u3061\u306f\u3002<\/p>\n<p>\u30bd\u30fc\u30b7\u30e3\u30eb\u30ed\u30b0\u30a4\u30f3\u3092\u3084\u308a\u305f\u3044\u3068\u3044\u3046\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u3054\u610f\u5411\u304c\u3042\u308a<br \/>\n\u3069\u3046\u3082Laravel\u3067\u306f\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u308b\u3089\u3057\u3044\u3001\u3068\u3044\u3046\u3053\u3068\u3082\u3042\u308a\u3001\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002<br \/>\n\u4eca\u56de\u306f\u3001LINE\/twitter\/Google\u3067\u3084\u3063\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>Laravel\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068.env\u3078\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9a\u304c\u7d42\u308f\u3063\u3066\u3044\u308b\u524d\u63d0\u3067\u3059\u3002<br \/>\n\u3061\u306a\u307f\u306b\u3001\u4eca\u56de\u306eLaravel\u306f5.8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/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\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E8%AA%8D%E8%A8%BC%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E4%BD%9C%E6%88%90\" >\u8a8d\u8a3c\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#Socialite_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB\" >Socialite \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%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%AE%E7%99%BB%E9%8C%B2\" >\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u767b\u9332<\/a><\/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\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AA%E3%82%B9%E3%83%8A%E3%81%AE%E7%99%BB%E9%8C%B2\" >\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u306e\u767b\u9332<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#SNS%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%81%94%E3%81%A8%E3%81%AE%E8%A8%AD%E5%AE%9A\" >SNS\u30d7\u30ed\u30d0\u30a4\u30c0\u3054\u3068\u306e\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-6\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#env\" >.env<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#configservicephp\" >config\/service.php<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9\" >\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E5%AE%9F%E8%A3%85\" >\u5b9f\u88c5<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#LoginController\" >LoginController<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%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><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E3%83%93%E3%83%A5%E3%83%BC\" >\u30d3\u30e5\u30fc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E7%A2%BA%E8%AA%8D\" >\u78ba\u8a8d<\/a><\/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\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/#%E3%81%BE%E3%81%A8%E3%82%81\" >\u307e\u3068\u3081<\/a><\/li><\/ul><\/nav><\/div>\n<h5><span class=\"ez-toc-section\" id=\"%E8%AA%8D%E8%A8%BC%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E4%BD%9C%E6%88%90\"><\/span>\u8a8d\u8a3c\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Laravel\u6a19\u6e96\u306e\u8a8d\u8a3c\u30d5\u30a9\u30fc\u30e0\u3092\u62e1\u5f35\u3057\u3088\u3046\u3068\u601d\u3046\u306e\u3067\u3001<br \/>\n\u306a\u306b\u306f\u3068\u3082\u3042\u308c\u30b3\u30de\u30f3\u30c9\u5b9f\u884c<\/p>\n<pre>php artisan make:auth<\/pre>\n<p>\u306d\u3093\u306e\u305f\u3081\u3001\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3057\u3066\u3001\u78ba\u8a8d\u3092\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre>php artisan serv<\/pre>\n<p>\u3067\u3001<code>http:\/\/localhost:8000\/login<\/code>\u306b\u30a2\u30af\u30bb\u30b9\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1029\" src=\"https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/23.png\" alt=\"\" width=\"976\" height=\"614\" srcset=\"https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/23.png 976w, https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/23-300x189.png 300w, https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/23-768x483.png 768w\" sizes=\"(max-width: 976px) 100vw, 976px\" \/><\/p>\n<p>\u306f\u3044\u3002\u3068\u308a\u3042\u3048\u305a\u305d\u306e\u307e\u3093\u307e\u3067\u3059\u3002<\/p>\n<p>\u6b21\u3078\u3002<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"Socialite_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB\"><\/span>Socialite \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u3053\u3044\u3064\u304c\u30bd\u30fc\u30b7\u30e3\u30eb\u30ed\u30b0\u30a4\u30f3\u306e\u5143\u7de0\u3081\u306e\u3088\u3046\u3067\u3059\u3002<br \/>\nComposer\u3092\u4f7f\u3063\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre>composer require laravel\/socialite<\/pre>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u305f\u3089\u3001\u6b21\u306f\u30c9\u30e9\u30a4\u30d0\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<br \/>\nLINE\/twitter\/Google\u3068\u6b32\u5f35\u308b\u306e\u3067\u30013\u56de\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3067\u3059\u3002<\/p>\n<pre>composer require socialiteproviders\/line\r\ncomposer require socialiteproviders\/twitter\r\ncomposer require socialiteproviders\/google<\/pre>\n<p>\u3067\u306f\u3001\u6b21\u3002<\/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%AE%E7%99%BB%E9%8C%B2\"><\/span>\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u767b\u9332<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>config\/app.php\u306b\u4e0b\u8a18\u3092\u8ffd\u8a18\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\">:\r\n    'providers' =&gt; [\r\n        :\r\n        \/*\r\n         * Package Service Providers...\r\n         *\/\r\n        \\SocialiteProviders\\Manager\\ServiceProvider::class, \/\/ &lt;- \u3053\u3053\r\n        :\r\n    ],\r\n:<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AA%E3%82%B9%E3%83%8A%E3%81%AE%E7%99%BB%E9%8C%B2\"><\/span>\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u306e\u767b\u9332<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>app\/Providers\/EventServiceProvider.php\u306b\u30ea\u30b9\u30ca\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true \">    protected $listen = [\r\n        Registered::class =&gt; [\r\n            SendEmailVerificationNotification::class,\r\n        ],\r\n        \/\/ \u3053\u3053\u304b\u3089\r\n        \\SocialiteProviders\\Manager\\SocialiteWasCalled::class =&gt; [\r\n            'SocialiteProviders\\Line\\LineExtendSocialite@handle',\r\n            'SocialiteProviders\\Twitter\\TwitterExtendSocialite@handle',\r\n            'SocialiteProviders\\Google\\GoogleExtendSocialite',\r\n        ],\r\n        \/\/ \u3053\u3053\u307e\u3067\r\n    ];\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"SNS%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%81%94%E3%81%A8%E3%81%AE%E8%A8%AD%E5%AE%9A\"><\/span>SNS\u30d7\u30ed\u30d0\u30a4\u30c0\u3054\u3068\u306e\u8a2d\u5b9a<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u30d7\u30ed\u30d0\u30a4\u30c0\u3054\u3068\u306b\u767a\u884c\u3055\u308c\u308bclient ID, client secret, callback url\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<br \/>\n\u57fa\u672c\u7684\u306b\u306f.env\u306b\u5b9a\u7fa9\u3057\u3066\u304a\u3044\u3066\u3001config\/service.php\u3067\u8aad\u307f\u8fbc\u3080\u3088\u3046\u306b\u3059\u308b\u306e\u304c\u826f\u3044\u3067\u3059\u306d\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"env\"><\/span>.env<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"\">LINE_CLIENT_ID=[\u30c1\u30e3\u30cd\u30eb\u57fa\u672c\u8a2d\u5b9a \u306e Channel ID]\r\nLINE_CLIENT_SECRET=[\u30c1\u30e3\u30cd\u30eb\u57fa\u672c\u8a2d\u5b9a \u306e Channel Secret]\r\nLINE_CALLBACK_URL=[\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u8a2d\u5b9a \u306e Callback URL]\r\n\r\nTWITTER_CLIENT_ID=[Keys and Tokens \u306e Consumer API Keys(API key) ]\r\nTWITTER_CLIENT_SECRET=[Keys and Tokens \u306e Consumer API Keys(API secret key) ]\r\nTWITTER_CALLBACK_URL=[App Details \u306e Callback URL]\r\n\r\nGOOGLE_CLIENT_ID=[\u30af\u30e9\u30a4\u30a2\u30f3\u30c8ID]\r\nGOOGLE_CLIENT_SECRET=[\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b7\u30fc\u30af\u30ec\u30c3\u30c8]\r\nGOOGLE_CALLBACK_URL=[\u627f\u8a8d\u6e08\u307f\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8 URI]\r\n<\/pre>\n<h6><span class=\"ez-toc-section\" id=\"configservicephp\"><\/span>config\/service.php<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<pre class=\"lang:default decode:true\">:\r\n\/\/ \u3053\u3053\u304b\u3089\r\n'line' =&gt; [\r\n  'client_id'     =&gt; env('LINE_CLIENT_ID'),\r\n  'client_secret' =&gt; env('LINE_CLIENT_SECRET'),\r\n  'redirect'      =&gt; env('LINE_CALLBACK_URL'),\r\n],\r\n\r\n'twitter' =&gt; [\r\n  'client_id'     =&gt; env('TWITTER_CLIENT_ID'),\r\n  'client_secret' =&gt; env('TWITTER_CLIENT_SECRET'),\r\n  'redirect'      =&gt; env('TWITTER_CALLBACK_URL'),\r\n],\r\n\r\n'google' =&gt; [\r\n  'client_id'     =&gt; env('GOOGLE_CLIENT_ID'),\r\n  'client_secret' =&gt; env('GOOGLE_CLIENT_SECRET'),\r\n  'redirect'      =&gt; env('GOOGLE_CALLBACK_URL'),\r\n],\r\n\/\/ \u3053\u3053\u307e\u3067\r\n:\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\"><\/span>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>make:auth\u3067\u4f7f\u7528\u3059\u308bUser\u30c6\u30fc\u30d6\u30eb\u306b\u3061\u3087\u3063\u3068\u624b\u3092\u52a0\u3048\u307e\u3059\u3002<br \/>\n\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e0d\u8981\u306a\u306e\u3067\u3001password\u30ab\u30e9\u30e0\u3092nullable\u306b\u5909\u66f4\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u305d\u306e\u524d\u306b\u3001doctrine\/dbal\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"\">composer require doctrine\/dbal<\/pre>\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u305f\u3089\u3001migration\u7528\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n\u307e\u305a\u306f\u30b3\u30de\u30f3\u30c9\u3002<\/p>\n<pre>php artisan make:migration prepare_user_table_for_social_login --table=users<\/pre>\n<p>\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u307e\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 PrepareUserTableForSocialLogin 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        Schema::table('users', function (Blueprint $table) {\r\n            \/\/\r\n            $table-&gt;string('password')-&gt;nullable()-&gt;change();\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        Schema::table('users', function (Blueprint $table) {\r\n            \/\/\r\n            $table-&gt;string('password')-&gt;nullable(false)-&gt;change();\r\n        });\r\n    }\r\n}\r\n<\/pre>\n<p>\u3053\u3053\u307e\u3067\u304d\u305f\u3089\u3001migrate\u3002<\/p>\n<pre>php artisan migrate<\/pre>\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u3001\u601d\u3044\u901a\u308a\u306b\u306a\u3063\u3066\u3044\u305f\u3089OK\u3067\u3059\u3002<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E5%AE%9F%E8%A3%85\"><\/span>\u5b9f\u88c5<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u3067\u306f\u3001\u5b9f\u88c5\u3067\u3059\u3002<\/p>\n<h6><span class=\"ez-toc-section\" id=\"LoginController\"><\/span>LoginController<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>app\/Http\/Controllers\/Auth\/LoginController.php\u306b\u4e0b\u8a18\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\">   \/\/\u30ed\u30b0\u30a4\u30f3\u30dc\u30bf\u30f3\u304b\u3089\u30ea\u30f3\u30af\r\n    public function socialLogin($social)\r\n    {\r\n        return Socialite::driver($social)-&gt;redirect();\r\n    }\r\n\r\n    \/\/Callback\u51e6\u7406\r\n    public function handleProviderCallback($social)\r\n    {\r\n        \/\/\u30bd\u30fc\u30b7\u30e3\u30eb\u30b5\u30fc\u30d3\u30b9\uff08\u60c5\u5831\uff09\u3092\u53d6\u5f97\r\n        $userSocial = Socialite::driver($social)-&gt;stateless()-&gt;user();\r\n        \/\/email\u3067\u767b\u9332\u3092\u8abf\u3079\u308b\r\n        $user = User::where(['email' =&gt; $userSocial-&gt;getEmail()])-&gt;first();\r\n\r\n        \/\/\u767b\u9332\uff08email\uff09\u306e\u6709\u7121\u3067\u5206\u5c90\r\n        if($user){\r\n\r\n            \/\/\u767b\u9332\u3042\u308c\u3070\u305d\u306e\u307e\u307e\u30ed\u30b0\u30a4\u30f3\uff082\u56de\u76ee\u4ee5\u964d\uff09\r\n            Auth::login($user);\r\n            return redirect('\/home');\r\n\r\n        }else{\r\n\r\n            \/\/\u306a\u3051\u308c\u3070\u767b\u9332\uff08\u521d\u56de\uff09\r\n            $newuser = new User;\r\n            $newuser-&gt;name = $userSocial-&gt;getName();\r\n            $newuser-&gt;email = $userSocial-&gt;getEmail();\r\n            $newuser-&gt;save();\r\n\r\n            \/\/\u305d\u306e\u307e\u307e\u30ed\u30b0\u30a4\u30f3\r\n            Auth::login($newuser);\r\n            return redirect('\/home');\r\n\r\n        }\r\n    }\r\n<\/pre>\n<h6><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><\/h6>\n<p>routes\/web.php\u306b\u4e0b\u8a18\u3092\u8ffd\u8a18\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true \">Route::get('login\/{provider}', 'App\\Http\\Controllers\\Auth\\LoginController@socialLogin');\r\nRoute::get('login\/{provider}\/callback', 'App\\Http\\Controllers\\Auth\\LoginController@handleProviderCallback');\r\n<\/pre>\n<h6><span class=\"ez-toc-section\" id=\"%E3%83%93%E3%83%A5%E3%83%BC\"><\/span>\u30d3\u30e5\u30fc<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>\u30ed\u30b0\u30a4\u30f3\u306e\u30d3\u30e5\u30fc\u306b\u5404\u30d7\u30ed\u30d0\u30a4\u30c0\u30ed\u30b0\u30a4\u30f3\u7528\u306e\u30ea\u30f3\u30af\u3092\u8a2d\u7f6e\u3057\u307e\u3059\u3002<br \/>\n\u30a2\u30a4\u30b3\u30f3\u306ffont-awesome\u306e\u3092\u4f7f\u304a\u3046\u3068\u601d\u3046\u306e\u3067\u3001<br \/>\n\u307e\u305a\u306fresources\/views\/layouts\/login.blade.php\u306bCSS\u8aad\u307f\u8fbc\u307f\u90e8\u5206\u3092\u8ffd\u8a18\u3057\u307e\u3059\u3002<br \/>\nfont-awesome\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089 \u21d2 <a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener\">Font Awesome<\/a><\/p>\n<pre class=\"lang:default decode:true\">:\r\n    &lt;!-- Styles --&gt;\r\n    &lt;link href=\"{{ asset('css\/app.css') }}\" rel=\"stylesheet\"&gt;\r\n    {{--\u3053\u3053--}}\r\n    &lt;link rel=\"stylesheet\" href=\"https:\/\/use.fontawesome.com\/releases\/v5.8.0\/css\/all.css\" integrity=\"sha384-Mmxa0mLqhmOeaE8vgOSbKacftZcsNYDjQzuCOm6D02luYSzBG8vpaOykv9lFQ51Y\" crossorigin=\"anonymous\"&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n:<\/pre>\n<p>\u6b21\u306bresources\/views\/auth\/login.blade.php\u3092\u7de8\u96c6\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\">: \r\n    &lt;div class=\"card-body\"&gt;\r\n        &lt;form method=\"POST\" action=\"{{ route('login') }}\"&gt;\r\n        @csrf\r\n        {{--\u3053\u3053\u304b\u3089--}}\r\n        &lt;div class=\"form-group row\"&gt;\r\n            &lt;label for=\"name\" class=\"col-sm-4 col-form-label text-md-right\"&gt;Login With&lt;\/label&gt;\r\n            &lt;a href=\"{{ url('login\/line')}}\" class=\"btn btn-social-icon btn-line\"&gt;&lt;i class=\"fab fa-line fa-5x\"&gt;&lt;\/i&gt;&lt;\/a&gt;\r\n            &lt;a href=\"{{ url('login\/twitter')}}\" class=\"btn btn-social-icon btn-twitter\"&gt;&lt;i class=\"fab fa-twitter fa-5x\"&gt;&lt;\/i&gt;&lt;\/a&gt;\r\n            &lt;a href=\"{{ url('login\/google')}}\" class=\"btn btn-social-icon btn-google\"&gt;&lt;i class=\"fab fa-google fa-5x\"&gt;&lt;\/i&gt;&lt;\/a&gt;\r\n        &lt;\/div&gt;\r\n        {{--\u3053\u3053\u307e\u3067--}}\r\n\r\n        &lt;div class=\"form-group row\"&gt;\r\n            &lt;label for=\"email\" class=\"col-md-4 col-form-label text-md-right\"&gt;{{ __('E-Mail Address') }}&lt;\/label&gt;\r\n:<\/pre>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E7%A2%BA%E8%AA%8D\"><\/span>\u78ba\u8a8d<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u3055\u3066\u3001\u3053\u3053\u307e\u3067\u6765\u305f\u3089\u3001\u3082\u3046\u4e00\u5ea6\u30ed\u30b0\u30a4\u30f3\u30da\u30fc\u30b8\u3092\u8997\u3044\u3066\u307f\u308b\u3068\u30fb\u30fb\u30fb\uff1f<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1051\" src=\"https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/24.png\" alt=\"\" width=\"975\" height=\"565\" srcset=\"https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/24.png 975w, https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/24-300x174.png 300w, https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/24-768x445.png 768w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/p>\n<p>\u3044\u3051\u3066\u308b\u3084\u3093\uff01<br \/>\n\u305f\u3081\u3057\u306b\u3001LINE\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u307d\u3061\u3063\u3068\u306a\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1053 size-full\" src=\"https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/25-e1553230063973.png\" alt=\"\" width=\"928\" height=\"555\" srcset=\"https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/25-e1553230063973.png 928w, https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/25-e1553230063973-300x179.png 300w, https:\/\/idealive.jp\/blog\/wp-content\/uploads\/2019\/03\/25-e1553230063973-768x459.png 768w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/p>\n<p>\u304a\u304a\u3002<br \/>\n\u3042\u3068\u306f\u6a29\u9650\u3092\u8a31\u53ef\u3057\u305f\u3089\u30fb\u30fb\u30fb<\/p>\n<p>Woops\uff01\u306a\u3093\u304b\u30a8\u30e9\u30fc\u51fa\u307e\u3057\u305f\u3002<br \/>\nGuzzleHttp \\ Exception \\ RequestException<br \/>\ncURL error 60: SSL certificate problem: unable to get local issuer certificate (see http:\/\/curl.haxx.se\/libcurl\/c\/libcurl-errors.html)<\/p>\n<p>\u30b0\u30b0\u3063\u3066\u307f\u308b\u3068\u89e3\u6c7a\u65b9\u6cd5\u304c\uff01 \u21d2 <a href=\"https:\/\/github.com\/yabacon\/paystack-php\/wiki\/cURL-error-60:-SSL-certificate-problem:-unable-to-get-local-issuer-certificate-(see-http:--curl.haxx.se-libcurl-c-libcurl-errors.html)\" target=\"_blank\" rel=\"noopener\">cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http: curl.haxx.se libcurl c libcurl errors.html)<\/a><\/p>\n<p>\u4e0a\u8a18\u306e\u30b5\u30a4\u30c8\u306b\u3088\u308b\u3068<br \/>\n\u30fbhttps:\/\/curl.haxx.se\/ca\/cacert.pem\u304b\u3089\u8a3c\u660e\u66f8\u3092DL\u3057\u3066\u4fdd\u5b58<br \/>\n\u30fbphp.ini\u306b\u8a2d\u5b9a\u3057\u3066\u518d\u8d77\u52d5 Finish!<br \/>\n\u3067OK\u3068\u306e\u3053\u3068\u3002<br \/>\nphp.ini\u3092\u7de8\u96c6\u3057\u3001\u30b5\u30fc\u30d0\u3092\u518d\u8d77\u52d5\u3057\u3066\u5404\u30a2\u30a4\u30b3\u30f3\u306e\u6319\u52d5\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<p>LINE\uff1a\u30a8\u30e9\u30fc<br \/>\n\u21d2email\u304c\u8fd4\u3063\u3066\u3053\u306a\u304b\u3063\u305f\u306e\u3067\u3002LINE\u5074\u306e\u8a2d\u5b9a\u3067\u4f55\u3068\u304b\u3067\u304d\u305d\u3046\u306a\u306e\u3067\u653e\u7f6e\u3002<br \/>\nemail\u304c\u8fd4\u3063\u3066\u3053\u306a\u304b\u3063\u305f\u6642\u306e\u5bfe\u51e6\u306f\u8003\u3048\u3066\u304a\u3053\u3046\u3002<\/p>\n<p>Twitter\uff1a\u6210\u529f\uff01<\/p>\n<p>Google\uff1a\u30a8\u30e9\u30fc\u306e\u3061\u6210\u529f\u3001\u3067\u3082\u3084\u3063\u3071\u308a\u30fb\u30fb\u30fb\uff1f<br \/>\n\u21d2\u307e\u305a\u306f\u5931\u6557\u306b\u3064\u3044\u3066\u3002\u3069\u3046\u3084\u3089localhost\u304c\u826f\u304f\u306a\u3044\u307f\u305f\u3044\u3002<br \/>\nngrok\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u6210\u529f\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3002<br \/>\nngrok\u306b\u3064\u3044\u3066\u306f\u3001\u516c\u5f0f\u30b5\u30a4\u30c8\u3092\u3069\u3046\u305e \u21d2 <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener\">ngrok &#8211; secure introspectable tunnels to localhost<\/a><\/p>\n<p>\u21d2ngrok\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u89e3\u6c7a\u306f\u3057\u305f\u3051\u3069\u3082\u3001\u3088\u304f\u3088\u304f\u8abf\u3079\u308b\u3068\u3001<br \/>\nGoogle+ API\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u5224\u660e\u3002\u3053\u308c\u306f\u3061\u3087\u3063\u3068\u307e\u305a\u3044\u3002<br \/>\n<code>composer require socialiteproviders\/google<\/code>\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u308b\u306e\u306f<br \/>\nGoogle+\u7528\u306e\u3082\u306e\u307f\u305f\u3044\u3067\u3059\u3002<br \/>\n\u30bd\u30fc\u30b9\u3092\u3061\u3087\u3044\u3061\u3087\u3044\u3063\u3068\u6539\u9020\u3057\u305f\u3089\u89e3\u6c7a\u3057\u305d\u3046\u306a\u96f0\u56f2\u6c17\u306a\u306e\u3067<br \/>\n\u305d\u308c\u306f\u5f8c\u65e5\u3084\u308b\u3063\u3066\u3053\u3068\u3067\u3001\u4eca\u56de\u306f\u304a\u3057\u307e\u3044\u3002<\/p>\n<hr \/>\n<h5><span class=\"ez-toc-section\" id=\"%E3%81%BE%E3%81%A8%E3%82%81\"><\/span>\u307e\u3068\u3081<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>\u30a6\u30bd\u307f\u305f\u3044\u306a\u30b3\u30fc\u30c9\u306e\u5c11\u306a\u3055\u3067SNS\u8a8d\u8a3c\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\nSocialiteProvider\u306b\u306f\u3055\u307e\u3056\u307e\u306a\u30b5\u30fc\u30d3\u30b9\u7528\u306e\u3082\u306e\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\nYahoo\u3068\u304b\u3001Youtube\u3068\u304b\u3001LinkedIn\u3068\u304b\u3001Facebook\u3068\u304b\u3001Weibo\u306a\u3093\u304b\u3082\u3002<br \/>\n\u3053\u308c\u306f\u4f7f\u3046\u3057\u304b\u306a\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>R.TANAKA\u304c\u304a\u5c4a\u3051\u3057\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3069\u3046\u3082\u3053\u3093\u306b\u3061\u306f\u3002 \u30bd\u30fc\u30b7\u30e3\u30eb\u30ed\u30b0\u30a4\u30f3\u3092\u3084\u308a\u305f\u3044\u3068\u3044\u3046\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u3054\u610f\u5411\u304c\u3042\u308a \u3069\u3046\u3082Laravel\u3067\u306f\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u308b\u3089\u3057\u3044\u3001\u3068\u3044\u3046\u3053\u3068\u3082\u3042\u308a\u3001\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002 \u4eca\u56de\u306f\u3001LINE\/twitter\/Google\u3067\u3084\u3063\u3066&#8230;<a class=\"read-more-link button\" href=\"https:\/\/idealive.jp\/blog\/2019\/03\/22\/laravel%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e3%82%b6%e3%82%b6%e3%83%83%e3%81%a8%e4%bd%9c%e3%82%8b\/\">\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-1028","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\/1028"}],"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=1028"}],"version-history":[{"count":26,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/posts\/1028\/revisions"}],"predecessor-version":[{"id":1074,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/posts\/1028\/revisions\/1074"}],"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=1028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/categories?post=1028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idealive.jp\/blog\/wp-json\/wp\/v2\/tags?post=1028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}