好吧,我閱讀了如何在應用程序中實現Laravel socialite,這樣我就可以讓用戶使用Google或Facebook登錄。我讀了如何去做here。我遇到的這種方法遇到的問題是,如果用戶通過電子郵件[email protected]登錄Google,然後使用[email protected]從Facebook登錄,他們將登錄到同一個帳戶!安全問題正確。所以我認爲,在我讓他們登錄之前,我會檢查你可以得到的提供者ID,但是當我嘗試比較存儲在數據庫中的provider_id時,他們創建的帳戶與存儲在社交名稱用戶變量I中的provider_id得到這個錯誤:Laravel Socialite - 具有相同電子郵件的不同提供商 - 安全性如何修復
參數1傳遞給照亮\身份驗證\ SessionGuard ::登錄()必須實現接口照亮\ \合同驗證\可驗證,照亮例如\ HTTP \ RedirectResponse給出
這裏是所有的代碼我用於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
]);
}
}
這個問題最初發布在這裏:http://stackoverflow.com/questions/37247380/laravel-socialite-user-getid – Magearlik