Ich bin jedoch neu bei Laravel und folge dem Tutorial auf http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/ , um einen Benutzer über Facebook in meine Anwendung einzuloggen. Fast überall finde ich jedoch ein Tutorial mit Github oder Twitter für das in Laravel bereitgestellte Socialite Plugin.
Mein Problem ist, dass beim Klicken auf die Schaltfläche "Bei Facebook anmelden" alles im Tutorial folgt, wurde eine "Ungültige Argument-Ausnahme" mit dem Treiber "Kein sozialer Benutzer" angegeben. ".
Eine andere Stapelüberlauffrage schien die Dinge einzugrenzen: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n
Angabe, dass das Problem in der Datei config/services.php liegt
Jetzt habe ich die app_id und app_secret. Der Weiterleitungslink scheint jedoch verwirrend zu sein, da ich ihn auch nicht auf Facebook finden kann. Ich bin mir bewusst, dass meine App sich hier für das Login anmelden sollte, jedoch nicht sicher ist, was sie sein soll.
Hat jemand eine Idee dazu?.
In Ihrem composer.json add- "laravel/socialite": "~2.0",
"require": {
"laravel/framework": "5.0.*",
"laravel/socialite": "~2.0",
der Lauf composer update
In config/services.php add:
//Socialite
'facebook' => [
'client_id' => '1234567890444',
'client_secret' => '1aa2af333336fffvvvffffvff',
'redirect' => 'http://laravel.dev/login/callback/facebook',
],
Sie müssen zwei Routen erstellen, meine sind wie folgt:
//Social Login
Route::get('/login/{provider?}',[
'uses' => '[email protected]',
'as' => 'auth.getSocialAuth'
]);
Route::get('/login/callback/{provider?}',[
'uses' => '[email protected]',
'as' => 'auth.getSocialAuthCallback'
]);
Sie müssen auch einen Controller für die obigen Routen erstellen:
<?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';
}
}
}
und schließlich fügen Sie Ihrer Facebook-App die URL der Website hinzu:
Es ist ein bisschen schwierig für etwas, das aussieht/sollte einfach sein, aber trotzdem mache ich die Dinge für mich.
sie finden diese Anweisungen und weitere Details in socialite docs
composer require laravel/socialite
in config/services.php hinzufügen
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
in .env datei hinzufügen
FACEBOOK_CLIENT_ID=paste_client_id_here
FACEBOOK_CLIENT_SECRET=paste_client_secret_here
FACEBOOK_CALLBACK_URL=https://www.example.com/auth/facebook/callback
in routes/web.php hinzufügen
Route::get('auth/facebook/', 'Auth\[email protected]')->name('auth.facebook');
Route::get('auth/facebook/callback', 'Auth\[email protected]')->name('auth.facebook.callback');
in App\Http\Controllers\Auth neuen Controller hinzufügen 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');
}
}
}
gehen Sie zu https://developers.facebook.com/apps und erstellen Sie eine neue App (falls Sie noch keine haben)
und stellen Sie sicher, dass Ihre App-Einstellungen in diesen Screenshots wie folgt aussehen:
Wenn Sie auf Ihrem lokalen Computer entwickeln, müssen Sie Tools wie ngrok verwenden, die einen sicheren Link zu Ihrem localhost bereitstellen.
Ändern Sie in den Facebook-Login-Einstellungen https://www.example.com mit dem url von ngrok etwas wie - https://8b0215bc.ngrok.io.
Dies ist der einzige Weg, der für mich beim Entwickeln auf meinem lokalen Rechner funktioniert hat.
Erstellen Sie einen Provider in Ihrer config/services.php-Datei
'facebook' => [
'client_id' => 'your-fb-client-id',
'client_secret' => 'your-fb-secret',
'redirect' => 'http://your-redirect.com/route',
],
jetzt können Sie einen Controller mit folgendem Code erstellen
//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);
}
und das ist deine Route
Route::get('facebook', '[email protected]');
Route::get('callback', '[email protected]');