質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

1055閲覧

Laravel8でSocialiteでログイン機能が実装をしたい

atsupoooon

総合スコア47

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

1クリップ

投稿2023/01/01 04:01

編集2023/01/01 04:03

前提

Laravel8
socialite 5.5
PHP 8.0.8
socialiteproviders .4.1

Laravel8にsocialiteでログイン機能実装したく、実装しているのですが、エラーが発生して実装がなく、
原因もわからずでして、お教えいただきたいです。
参考にしたページ:https://qiita.com/backstreet/items/90f67114d39065ca907c

リダイレクトして、twitterであればTwitterの承認画面が表示されて、
承認した後に、コールバックが返ってきてLaravel側に戻ってきた際に、エラーになります。

発生している問題・エラーメッセージ

LoginController.phpで$sns_user = Socialite::driver($provider)->user();の箇所で
エラーが発生しております。エラー文章が下記になります。

LoginController.php

1Indirect modification of overloaded property SocialiteProviders\Manager\OAuth1\User::$urls has no effect

LoginController.php

1<?php 2namespace App\Http\Controllers\Auth; 3namespace App\Http\Controllers\frontend; 4 5use App\Http\Controllers\Controller; 6use Illuminate\Http\Request; 7use App\Models\Member; 8use Laravel\Socialite\Facades\Socialite; 9use Illuminate\Support\Facades\Hash; 10use Illuminate\Support\Str; 11 12class LoginController extends Controller 13{ 14 15 public function redirectToProvider(Request $request) 16 { 17 $provider = $request->provider; 18 return Socialite::driver($provider)->redirect(); 19 } 20 21 public function handleProviderCallback(Request $request, $provider) 22 { 23 $provider = $request->provider; 24 $sns_user = Socialite::driver($provider)->user(); //エラー箇所 25 $sns_email = $sns_user->getEmail(); 26 $sns_name = $sns_user->getName(); 27 28 if (!is_null($sns_email)) { 29 $user = Member::firstOrCreate( 30 ['email' => $sns_email], 31 [ 32 'email' => $sns_email, 'name' => $sns_name, 'password' => Hash::make(Str::random()) 33 ] 34 ); 35 auth()->login($user); 36 session()->flash('oauth_login', $provider . 'でログインしました。'); 37 return redirect('/'); 38 } 39 return '取得不可'; 40 } 41} 42
Route::view('/login', 'frontend.login.index')->name('frontend.login.index'); Route::prefix('login/{provider}')->where(['provider' => '(twitter|facebook|google|github)'])->group(function () { Route::get('/', [App\Http\Controllers\frontend\LoginController::class, 'redirectToProvider'])->name('sns_login.redirect'); Route::get('/callback', [App\Http\Controllers\frontend\LoginController::class, 'handleProviderCallback'])->name('sns_login.callback'); });

補足情報

app.phpのprovidersに「SocialiteProviders\Manager\ServiceProvider::class,」
aliasesに「'Socialite' => Laravel\Socialite\Facades\Socialite::class,」
は追加しております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

socialiteprovidersは邪魔なだけなので削除していい。Laravelのドキュメントに書いてあって一見半公式っぽいけど全く使い物にならない。

app.phpのprovidersに「SocialiteProviders\Manager\ServiceProvider::class,」
aliasesに「'Socialite' => Laravel\Socialite\Facades\Socialite::class,」

どっちも不要なのでまず全部元に戻す。

twitter|facebook|google|githubならSocialite公式だけで対応してるので他を使う必要はない。
https://github.com/laravel/socialite/tree/5.x/src/Two
今はTwitterもOAuth2版がある。SocialiteProviders\Manager\OAuth1\UserなんてOAuth1がエラーメッセージに出てきてる時点でおかしい。
SocialiteProvidersのせいで壊れてる。

OAuth2版Twitterを使うにはconfig/services.phpでtwitter-oauth-2で設定するかtwitterに'oauth' => 2,を追加。

php

1'twitter-oauth-2' => [ 2 'client_id' => env('TWITTER_CLIENT_ID'), 3 'client_secret' => env('TWITTER_CLIENT_SECRET'), 4 'redirect' => 'http://example.com/callback-url', 5], 6 7'twitter' => [ 8 'client_id' => env('TWITTER_CLIENT_ID'), 9 'client_secret' => env('TWITTER_CLIENT_SECRET'), 10 'redirect' => 'http://example.com/callback-url', 11 'oauth' => 2, 12],

'oauth' => 2,のことはGitHubを見ないと分からない。
https://github.com/laravel/socialite/blob/ee6201f539ac47c3a55132449f9d20ee928f0ee2/src/SocialiteManager.php#L125

php

1 if (($config['oauth'] ?? null) === 2) { 2 return $this->createTwitterOAuth2Driver(); 3 }

Laravel公式のコードだけが唯一の正しい情報。変なブログも公式ではないSocialiteProvidersも信用してはいけない。

投稿2023/01/01 09:02

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atsupoooon

2023/01/03 13:00

ありがとうございます。 app.phpのprovidersに「SocialiteProviders\Manager\ServiceProvider::class,」 aliasesに「'Socialite' => Laravel\Socialite\Facades\Socialite::class,」 上記のコードは削除して再度試してみましたが、同じエラーになりました。 念の為、キャッシュなどもクリアしてみましたが、変わらずでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問