0

我使用的是 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;
    }
}

预先感谢您对我们宝贵的帮助

4

0 回答 0