在Laravel Socialite中的Google登录中打开页面时出错

问题描述

我使用Laravel Socialite登录到我的网站。但是登录时,出现404错误。 我已将Google和Facebook登录信息包含在下面的SocialController文件中。但是,使用Google登录时,出现错误404 |网页未找到。有人可以帮我解决错误吗?

web.PHP

Route::group(['namespace' => 'Guest'],function () {
    Route::get('oauth/{driver}','SocialController@redirectToProvider')->name('social.oauth');
    Route::get('oauth/{driver}/callback','SocialController@handleProviderCallback')->name('social.callback');
});

SocialController.PHP

class SocialController extends Controller
{
    public function getProvider($driver){
        if($driver == 'facebook'){
            $config = [
                'client_id' => settings()->FACEBOOK_APP_ID,'client_secret' => settings()->FACEBOOK_APP_SECRET,'redirect' => settings()->FACEBOOK_APP_CALLBACK_URL
            ];
            $provider = Socialite::buildprovider(
                \Laravel\Socialite\Two\FacebookProvider::class,$config
            );
        }else if($driver == 'google'){
            $config = [
                'client_id' => settings()->GOOGLE_APP_ID,'client_secret' => settings()->GOOGLE_APP_SECRET,'redirect' => settings()->GOOGLE_APP_CALLBACK_URL
            ];
            $provider = Socialite::buildprovider(
                \Laravel\Socialite\Two\GoogleProvider::class,$config
            );
            
        }
        return $provider; 
    }

    protected $providers = [
        'github','facebook','google','twitter'
    ];


    public function redirectToProvider($driver)
    {   
        if( ! $this->isProviderAllowed($driver) ) {
            return $this->sendFailedResponse("{$driver} is not currently supported");
        }
        try {
            return $this->getProvider($driver)->redirect();
        } catch (Exception $e) {
            return $this->sendFailedResponse($e->getMessage());
        }
    }

    public function handleProviderCallback( $driver )
    {
        try {
            $user = $this->getProvider($driver)->user();
            // $user = Socialite::driver($driver)->user();
        } catch (Exception $e) {
            return $this->sendFailedResponse($e->getMessage());
        }

        // check for email in returned user
        return empty( $user->email )
            ? $this->sendFailedResponse("No email id returned from {$driver} provider.")
            : $this->loginorCreateAccount($user,$driver);
    }
    protected function sendSuccessResponse()
    {
        return redirect()->intended('guest_home');
    }
    protected function sendFailedResponse($msg = null)
    {
        return redirect()->back()->with('status',$msg ?: 'Unable to login,try with another provider to login.');
    }
    protected function loginorCreateAccount($providerUser,$driver)
    {
        // check for already has account
        $user = User::where('email',$providerUser->email)->first();

        // if user already found
        if( $user ) {
            // update the avatar and provider that might have changed
            $user->update([
                'avatar' => $providerUser->avatar,'provider' => $driver,'provider_id' => $providerUser->id,'access_token' => $providerUser->token
            ]);

            // login the user
            Auth::login($user,true);

            return $this->sendSuccessResponse();
        } else {
            if($providerUser->getEmail()){ //Check email exists or not. If exists create a new user
                $newUser = User::create([
                    'type' => "Member",'name' => $providerUser->name,'email' => $providerUser->email,'avatar' => $providerUser->avatar,'access_token' => $providerUser->token,// user can use reset password to create a password
                    'password' => ''
                ]);
                
                // login the user
                Auth::login($newUser);

                return $this->sendSuccessResponse();
            }else{
                $this->sendFailedResponse("No email id returned from {$driver} provider.");
            }
        }

    }
    private function isProviderAllowed($driver)
    {
        return in_array($driver,$this->providers);
    }
 }

有人可以帮助我指出错误并帮助我解决吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)