2017-04-02 73 views
1

我正在尝试在Laravel中使用社交网站设置Google登录。但是,当我进入谷歌的凭证,它表明:社交网站Google登录显示“该网页无法正确重定向”

页面不能正常

重定向的URL http://127.0.0.1:8000/redirect/google

我web.php是:

Route::get('/redirect/google', '[email protected]'); 
Route::get('/callback/google', '[email protected]'); 

services.php:

'google' => [ 
    'client_id' => '-----.apps.googleusercontent.com', 
    'client_secret' => '---------', 
    'redirect' => 'http://127.0.0.1:8000/callback/google' 
], 

SocialAuthController.php:

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\SocialAccountService; 
use Socialite; 

class SocialAuthController extends Controller { 
    // 
    public function redirect(){ 
     return Socialite::driver('google')->redirect(); 
    } 

    public function callback(SocialAccountService $service) { 
     $user = $service->createOrGetUser(Socialite::driver('google')->user()); 
     auth()->login($user); 
     return redirect()->back(); 
    } 
} 

SocialAccount.php:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class SocialAccount extends Model { 
    // 
    protected $fillable = ['user_id', 'provider_user_id', 'provider']; 

    public function user() { 
     return $this->belongsTo(User::class); 
    } 
} 

移民social_accounts_table

class CreateSocialAccountsTable extends Migration { 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() { 
     Schema::create('social_accounts', function (Blueprint $table) { 
      $table->increments('user_id'); 
      $table->string('provider_user_id'); 
      $table->string('provider'); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() { 
     Schema::dropIfExists('social_accounts'); 
    } 
} 

SocialAccountService.php

namespace App; 

use Laravel\Socialite\Contracts\User as ProviderUser; 

class SocialAccountService { 
    public function createOrGetUser(ProviderUser $providerUser) { 
     $account = SocialAccount::whereProvider('google') 
      ->whereProviderUserId($providerUser->getId()) 
      ->first(); 

     if ($account) { 
      return $account->user; 
     } else { 
      $account = new SocialAccount([ 
       'provider_user_id' => $providerUser->getId(), 
       'provider' => 'google' 
      ]); 

      $user = User::whereEmail($providerUser->getEmail())->first(); 

      if (!$user) { 
       $user = User::create([ 
        'email' => $providerUser->getEmail(), 
        'name' => $providerUser->getName(), 
        'role' => 'user', 
        'password' => '', 
       ]); 
      } 

      $account->user()->associate($user); 
      $account->save(); 
      return $user; 
     } 

    } 
} 
+0

社交名不会在本地 – C2486

回答

0

在你的服务,你必须

'redirect' => 'http://127.0.0.1:8000/callback/google' 

认证后,Google无法访问您的域名http://127.0.0.1(localhost)。你将不得不尝试与生产URL

0

我已经解决了这个问题,我的重定向() - >回调()调用回调函数。我仍然需要找到如何重定向回原始源页面,但重定向到家,解决了这个问题。