Laravelが初めてで、 http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/ のチュートリアルに従っています。 Facebook経由でユーザーをアプリケーションにログインするために使用しますが、ほとんどどこでも、Laravelで提供されるSocialiteプラグイン用のGithubまたはTwitterを使用したチュートリアルを見つけます。
私の問題は、チュートリアルのすべてに従うと、「Facebookにログイン」ボタンをクリックすると、Socialiteドライバーが指定されていない「無効な引数例外」がスローされることです。
別のスタックオーバーフローの質問は、物事を絞り込むように見えました: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n
問題がconfig/services.phpにあると述べる
今、私はapp_idとapp_secretを持っています。ただし、リダイレクトリンクはFacebookでも見つからないため、混乱しているようです。これは、アプリがログインのためにFacebookにアクセスする場所であることを認識していますが、どうあるべきかはわかりません。
誰もこれについて何か考えがありますか。
Composer.json add- "laravel/socialite": "~2.0",
"require": {
"laravel/framework": "5.0.*",
"laravel/socialite": "~2.0",
実行composer update
config/services.php追加:
//Socialite
'facebook' => [
'client_id' => '1234567890444',
'client_secret' => '1aa2af333336fffvvvffffvff',
'redirect' => 'http://laravel.dev/login/callback/facebook',
],
2つのルートを作成する必要があります。私の場合は次のようになります。
//Social Login
Route::get('/login/{provider?}',[
'uses' => 'AuthController@getSocialAuth',
'as' => 'auth.getSocialAuth'
]);
Route::get('/login/callback/{provider?}',[
'uses' => 'AuthController@getSocialAuthCallback',
'as' => 'auth.getSocialAuthCallback'
]);
上記のルートのコントローラーも次のように作成する必要があります。
<?php namespace App\Http\Controllers;
use Laravel\Socialite\Contracts\Factory as Socialite;
class AuthController extends Controller
{
public function __construct(Socialite $socialite){
$this->socialite = $socialite;
}
public function getSocialAuth($provider=null)
{
if(!config("services.$provider")) abort('404'); //just to handle providers that doesn't exist
return $this->socialite->with($provider)->redirect();
}
public function getSocialAuthCallback($provider=null)
{
if($user = $this->socialite->with($provider)->user()){
dd($user);
}else{
return 'something went wrong';
}
}
}
最後に、サイトアプリのURLをFacebookアプリに追加します。
見た目や簡単なものには少し注意が必要ですが、とにかくこれは私が物事をうまく機能させる方法です。
これらの手順と詳細は socialite docs にあります。
composer require laravel/socialite
inconfig/services.phpadd
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
in。envfile add
FACEBOOK_CLIENT_ID=paste_client_id_here
FACEBOOK_CLIENT_SECRET=paste_client_secret_here
FACEBOOK_CALLBACK_URL=https://www.example.com/auth/facebook/callback
inroutes/web.phpadd
Route::get('auth/facebook/', 'Auth\FacebookController@redirect')->name('auth.facebook');
Route::get('auth/facebook/callback', 'Auth\FacebookController@callback')->name('auth.facebook.callback');
inApp\Http\Controllers\Auth新しいコントローラーを追加FacebookController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use Socialite;
class FacebookController extends Controller {
/**
* Create a new controller instance.
*
* @return void
*/
public function redirect()
{
return Socialite::driver('facebook')->redirect();
}
/**
* Create a new controller instance.
*
* @return void
*/
public function callback(Request $request)
{
try {
$facebookAccount = Socialite::driver('facebook')->user();
// your logic here...
return redirect()->route('your.route.name');
} catch (Exception $e) {
return redirect()->route('auth.facebook');
}
}
}
https://developers.facebook.com/apps に移動して、新しいアプリを作成します(まだ持っていない場合)
これらのスクリーンショットでアプリの設定を以下のようにします。
ローカルマシンで開発している場合は、ローカルホストへの安全なリンクを提供する ngrok などのツールを使用する必要があります。
Facebookのログイン設定の変更 https://www.example.com withurlbyngrok) https://8b0215bc.ngrok.io 。
これは、ローカルマシンでの開発中に私のために働いた唯一の方法です。
Config/services.phpファイルの下にプロバイダーを作成します
'facebook' => [
'client_id' => 'your-fb-client-id',
'client_secret' => 'your-fb-secret',
'redirect' => 'http://your-redirect.com/route',
],
これで、次のコードでコントローラーを作成できます
//this function will redirect users to facebook login page
public function facebook()
{
return \Socialize::with('facebook')->redirect();
}
public function callback()
{
$user = \Socialize::with('facebook')->user();
//now we have user details in the $user array
dd($user);
}
これがあなたのルートです
Route::get('facebook', 'LoginController@facebook');
Route::get('callback', 'LoginController@callback');