我使用的是 laravel 7,最近搬到了 laravel 8。我在登录过程中遇到了问题。问题是,当我在网页上单击使用社交媒体按钮登录时,在登录相关社交媒体帐户后,它会重定向到我的登录屏幕。此时,当我单击主页按钮登录过程完成并重定向到主屏幕。
作曲家.json
"php": "^7.4.0",
"barryvdh/laravel-dompdf": "^0.8.5",
"cknow/laravel-money": "^6.0",
"dr5hn/countries-states-cities-database": "*",
"fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^7.0.1",
"hisorange/browser-detect": "^4.4",
"laravel/framework": "^8.0",
"laravel/legacy-factories": "^1.1",
"laravel/socialite": "^5",
"laravel/tinker": "^2.0",
"laravel/ui": "^3.0",
"laravelium/sitemap": "^8.0",
"mcamara/laravel-localization": "^1.4",
"phpoffice/phpword": "^0.17.0",
"realrashid/sweet-alert": "^3.2",
"silviolleite/laravelpwa": "^2.0"
路线/web.php
Route::get('login/{provider}', [SocialController::class, 'redirectToProvider']);
Route::get('login/{provider}/callback', [SocialController::class, 'handleProviderCallback']);
控制器
namespace App\Http\Controllers;
use App\Models\Country;
use App\Models\DateTime;
use App\Models\PaymentAccount;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
use Exception;
class SocialController extends Controller
{
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
public function handleProviderCallback($provider)
{
try {
$user = Socialite::driver($provider)->stateless()->user();
$isUser = User::where('provider_id', $user->id)->first();
if ($isUser) {
Auth::login($isUser,true);
return redirect()->intended('/home');
} else {
$createUser = $this->createUser($user,$provider);
Auth::login($createUser,true);
return redirect()->intended('/home');
}
} catch (Exception $exception) {
dd($exception->getMessage() , $exception->getCode() . $exception->getTraceAsString());
}
}
public function createUser($user, $provider)
{
$getCurrenctLocale = \Mcamara\LaravelLocalization\Facades\LaravelLocalization::getCurrentLocale();
$getCurrentRegional = \Mcamara\LaravelLocalization\Facades\LaravelLocalization::getCurrentLocaleRegional();
$countryISO2 = explode('_', $getCurrentRegional);
if (count($countryISO2) != 0) {
$countryISO2 = $countryISO2[1];
}
$user = User::create([
'name' => $user->getName(),
'email' => $user->getEmail(),
'avatar' => $user->getAvatar(),
'provider_id' => $user->getId(),
'provider' => $provider,
'language' => $getCurrentRegional,
'location' => $getCurrenctLocale,
'timezone' => \config('app.timezone', 'UTC'),
'date_format' => DateTime::getDateFormats()[0]['id'],
'time_format' => DateTime::getTimeFormats()[0]['id'],
'currency' => Country::query()->where('iso2', $countryISO2)->get('currency')->first()->currency,
]);
$paymentAccount = new PaymentAccount();
$paymentAccount->creator_id = $user->id;
$paymentAccount->owner_name = "";
$paymentAccount->type_id = PaymentAccount::PAYMENT_ACCOUNT_TYPE_CASH;
$paymentAccount->account_name = "Nakit";
$paymentAccount->save();
return $user;
}
}
预先感谢您对我们宝贵的帮助