问题描述
我使用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 (将#修改为@)