Ok, ich lese, wie Laravel Socialite in meiner Anwendung zu implementieren, damit ich Benutzer mit Google oder Facebook einloggen können. Ich lese, wie man es macht here. Das Problem, auf das ich bei diesem Ansatz stoße, ist Folgendes: Wenn sich ein Benutzer von Google per E-Mail [email protected] anmeldet und sich von Facebook aus unter [email protected] anmeldet, loggt er sich in dasselbe Konto ein! Sicherheitsfrage richtig. Also dachte ich, bevor ich sie einloggen ließ, würde ich die Provider-ID überprüfen, die Sie bekommen können, wenn ich versuche, die provider_id, die ich in der Datenbank ablege, zu vergleichen, wenn sie das Konto mit der in der socialite-Benutzervariablen I gespeicherten provider_id erstellt erhalten diese Fehlermeldung:Laravel Socialite - Verschiedene Anbieter mit der gleichen E-Mail - Sicherheit Wie zu beheben
Argument 1 geben \ Auth \ SessionGuard :: Anmelden Illuminate() muss Schnittstelle Illuminate \ Verträge \ Auth \ authentifizierbarer, Instanz von Illuminate \ Http \ RedirectResponse gegeben
Hier ist der gesamte Code implementieren Ich benutze für Socialite:
<?php
namespace App\Http\Controllers;
use Socialite;
use App\User;
use Auth;
use Illuminate\Support\Facades\Redirect;
use Flash;
use Illuminate\Http\Request;
use App\Http\Requests;
class SocialiteController extends Controller
{
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
public function handleProviderCallback($provider)
{
try
{
$social_user = Socialite::driver($provider)->user();
}
catch(Exception $e)
{
return Redirect::to('auth/' . $provider);
}
$authUser = $this->findOrCreateUser($social_user);
Auth::login($authUser, true);
flash()->overlay('You have been logged in successfully!', 'Congratulations');
return Redirect::to('/');
}
//create a new user in our database or grab existing user
private function findOrCreateUser($social_user)
{
if ($authUser = User::where('email', $social_user->email)->first()) {
//this creates an error
if($authUser->provider_id == $social_user->id)
return $authUser;
else
{
flash()->overlay('An account for that email already exists!', 'Error');
return Redirect::to('/');
}
}
return User::Create([
'provider_id' => $social_user->id,
'name' => $social_user->name,
'email' => $social_user->email,
'nickname' => $social_user->nickname,
'avatar_img' => $social_user->avatar,
'role_id' => 1, //set role to guest
'social_login' => true //tell the database they are logging in from oauth
]);
}
}
Diese Antwort wurde ursprünglich hier gepostet: http://stackoverflow.com/questions/37247380/laravel-socialite-user-getid – Magearlik